如何制作php https请求并阅读回复?

时间:2011-01-21 11:20:40

标签: php curl fsockopen

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

3 个答案:

答案 0 :(得分:5)

我遇到了类似问题,问题是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);

答案 1 :(得分:3)

您正在访问错误的端口。通常可以在端口443上访问HTTPS:

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

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

答案 2 :(得分:2)

虽然goreSplatter的答案是正确的,但是你在这里有3个分层协议 - 在套接字顶部的SSL之上的HTTP(它依次在IP堆栈的顶部运行)。您的方法仅针对3个(套接字)中的一个。

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

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

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