Как сделать php https запрос и прочитать ответ? - PullRequest
1 голос
/ 21 января 2011

Я хочу отправить некоторые почтовые данные на сервер и прочитать ответ. URL-адрес, который они предоставили мне, https://thesite.com/page/test.jsp,i, попытался использовать $ fp = fsockopen ("https://thesite.com/page/test.jsp", 80, $ errno, $ errstr, 30); но получил ошибку «Невозможно найти« HTTP »». Попытка отправки данных с использованием curl, но проверил с сервером, они не получили запрос. Есть ли другой способ сделать это?

Ответы [ 3 ]

5 голосов
/ 09 сентября 2012

У меня была проблема с аналогами, и проблема была в том, что curl по умолчанию не открывает веб-сайты с ненадежными сертификатами. Поэтому вы должны отключить эту опцию: curl_setopt ($ c, CURLOPT_SSL_VERIFYPEER, false); Таким образом, полный скрипт для создания http-запроса в curl будет выглядеть так:

$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);
3 голосов
/ 21 января 2011

Вы получаете доступ не к тому порту.HTTPS обычно доступен через порт 443:

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

Кроме того, вам необходимо указать идентификатор транспорта сокета с fsockopen.В этом примере это ssl://.

2 голосов
/ 21 января 2011

Хотя ответ goreSplatter верен, вы имеете дело с 3-х уровневыми протоколами: HTTP поверх SSL поверх сокетов (которые, в свою очередь, работают поверх стека IP). Ваш подход касается только одного из 3 (сокетов).

Подход goreSplatter по-прежнему требует от вас реализации собственного стека HTTP для обработки сообщений с сервером - это не тривиальная задача.

Я не думаю, что это возможно для POST-данных с помощью файловых оболочек (возможно, с помощью потоковых упаковщиков), но я бы посоветовал вам использовать cURL для доступа к URL и избавить себя от большой боли.

Есть много примеров, которые вы можете найти в Google - вот один

...