【问题标题】:How to make php https request and read response?如何发出 php https 请求并读取响应?
【发布时间】:2011-06-13 02:13:17
【问题描述】:

我想将一些帖子数据发送到服务器并阅读响应。他们提供给我的网址是 https://thesite.com/page/test.jsp,i 尝试使用 $fp = fsockopen("https://thesite.com/page/test.jsp" , 80, $errno, $errstr, 30);但出现“无法找到“HTTPs””错误。尝试使用 curl 发送数据但与服务器检查,他们没有收到任何请求。还有其他方法吗?

【问题讨论】:

标签: php curl fsockopen


【解决方案1】:

我有一个类似的问题,问题是默认情况下 curl 不会打开带有不受信任证书的网站。所以你必须禁用这个选项: curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); 因此,curl 中用于发出 http 请求的完整脚本将是:

$c = curl_init();
//webpage to which you try to send post 
curl_setopt($c, CURLOPT_URL, 'https://www.website/send_request.php');
curl_setopt($c, CURLOPT_POST, true);
// data to be sent via post
curl_setopt($c, CURLOPT_POSTFIELDS, 'var1=324213&var2=432');
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);

// Get the response and close the channel.

curl_exec ($c);

// read the error code if there are any errors
if(curl_errno($c))
{
    echo 'Curl error: ' . curl_error($c);
}
curl_close ($c);

【讨论】:

    【解决方案2】:

    您访问了错误的端口。 HTTPS 通常可以通过 443 端口访问:

    $fp = fsockopen('ssl://example.com', 443, $errno, $errstr, 30);
    

    此外,您需要使用fsockopen 指定socket transport 标识符。在此示例中,它是 ssl://

    【讨论】:

      【解决方案3】:

      虽然 goreSplatter 的回答是正确的,但您在这里处理的是 3 个分层协议 - 位于 SSL 之上的 HTTP 位于套接字之上(而后者又在 IP 堆栈之上运行)。您的方法仅解决 3 个(套接字)之一。

      goreSplatter 的方法仍然需要您实现自己的 HTTP 堆栈来处理与服务器的通信 - 这不是一项简单的任务。

      我认为使用文件包装器发布数据是不可能的(使用流包装器可能是可能的),但我建议您使用 cURL 访问 URL 并为自己省去很多痛苦。

      您可以在 Google 上找到很多示例 - here's one

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2018-04-04
        • 2018-09-16
        • 2018-04-27
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多