Надеюсь, это будет относительно прямолинейная вещь, и что мои навыки Google просто подвели меня по этому поводу. У меня есть защищенный BASIC ресурс, который я хочу, чтобы PHP выполнял HTTP-запрос POST.
Я попытался ввести « Аутентификация: основные (зашифрованные данные u / p) в заголовки, которые, похоже, не работали, поэтому я задаюсь вопросом, могут ли полномочия Greyskull иметь в виду, что StackOverflow предоставляет какие-либо указания.
$req .= "&cmd=_initiate_query"; $header = "POST /someendpoint HTTP/1.1\r\n". "Host:example.com\n". "Content-Type: application/x-www-form-urlencoded\r\n". "User-Agent: PHP-Code\r\n". "Content-Length: " . strlen($req) . "\r\n". "Connection: close\r\n\r\n"; $fp = fsockopen ('ssl://example.com', 443, $errno, $errstr, 30); if (!$fp) { // HTTP ERROR } else { fputs ($fp, $header . $req); while (!feof($fp)) { $result .= fgets ($fp, 128); } fclose ($fp); }
С помощью:
$header = "POST /someendpoint HTTP/1.1\r\n". "Host:example.com\n". "Content-Type: application/x-www-form-urlencoded\r\n". "User-Agent: PHP-Code\r\n". "Content-Length: " . strlen($req) . "\r\n". "Authorization: Basic ".base64_encode($username.':'.$password)."\r\n". "Connection: close\r\n\r\n";
Должен ли работать – вы уверены, что это обычная система аутентификации? Возможно, стоит посмотреть исходные данные заголовка, используя что-то вроде CharlesProxy, чтобы убедиться, что это аутентификация (и вы также сможете скопировать строку авторизации!).
Вот функция, которую я использую для выполнения запросов POST. Надеюсь, он может сделать то, что вы хотите:
function http_post($server, $port, $url, $vars) { // get urlencoded vesion of $vars array $urlencoded = ""; foreach ($vars as $Index => $Value) $urlencoded .= urlencode($Index ) . "=" . urlencode($Value) . "&"; $urlencoded = substr($urlencoded,0,-1); $headers = "POST $url HTTP/1.0\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n" . "Content-Length: ". strlen($urlencoded) . "\r\n\r\n"; $fp = fsockopen($server, $port, $errno, $errstr, 10); if (!$fp) return "ERROR: fsockopen failed.\r\nError no: $errno - $errstr"; fputs($fp, $headers); fputs($fp, $urlencoded); $ret = ""; while (!feof($fp)) $ret .= fgets($fp, 1024); fclose($fp); return $ret; }
И вот пример того, как я использовал его для пересылки переменных POST в API
$response = http_post("www.nochex.com", 80, "/nochex.dll/apc/apc", $_POST);