2011-01-21 141 views
1

我想发送一些文章数据到服务器并阅读响应。他们提供给我的网址是https://thesite.com/page/test.jsp,i尝试使用$ fp = fsockopen(“https://thesite.com/page/test.jsp”,80, $ errno,$ errstr,30);但得到'无法找到'HTTPs''错误。尝试使用curl发送数据,但与服务器进行检查,他们没有收到请求。是否有任何其他方式来做到这一点?如何让php https请求和读取响应?

+0

请指出为什么没有这些帮助解决你的问题:http://stackoverflow.com/search?q=How+to+make + php + https +请求+和+读取+响应%3F + php – Gordon 2011-01-21 11:33:24

回答

3

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

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

此外,你需要用fsockopen指定socket transport标识符。在这个例子中,它是ssl://

2

虽然goreSplatter的回答是正确的,但您在这里处理的是3层协议 - 在套接字顶端的SSL(反过来在IP协议栈上运行)上面的SSL。你的方法只处理3个(套接字)中的一个。

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

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

有很多的例子,你可以找到关于谷歌 - here's one

5

我有一个呈三角问题,而问题是,卷曲,默认情况下,不打开网站与不受信任的证书。所以你必须禁用这个选项:curl_setopt($ c,CURLOPT_SSL_VERIFYPEER,false); 所以在卷曲的完整剧本,制作一个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);