Я хочу отправить пост-переменные с помощью fsock, но когда я попробую это:
$post_arr = array ("a" => "b"); $addr = 'http://1.2.3.4/confirmation.html'; $fp = fsockopen($addr, 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $req = ''; foreach ($post_arr as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&" . $key . "=" . $value; } $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; fwrite($fp, $header); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
Я получаю «Невозможно найти перенос сокетов http», любые идеи, почему?
fsockopen()
открывает сокет. Сокеты ничего не знают о протоколах Layer5 +, таких как HTTP.
$fp = fsockopen('1.2.3.4', 80, $errno, $errstr, 30);
Чтобы запросить определенный путь, отправьте его в запросе: GET /confirmation.html
Чтобы указать домен, отправьте его в заголовке Host: 1.2.3.4
Возможно, вы захотите использовать расширение curl
. Как правило, нет никакой веской причины для создания HTTP-запросов вручную в PHP.