Выдача запроса FORM POST от PHP с использованием базовой аутентификации HTTP

StackOverflow https://stackoverflow.com/questions/1198756

  •  20-09-2019
  •  | 
  •  

Вопрос

Я надеюсь, что это относительно простая задача, и что мои навыки работы с Google меня просто подвели в этом случае.У меня есть ресурс, защищенный аутентификацией BASIC, к которому я хочу, чтобы PHP выполнял HTTP-запрос POST.

Я пробовал делать инъекции Аутентификация:Базовый (зашифрованные данные u/p) в заголовки, которые, похоже, не сработали - поэтому мне интересно, могут ли полномочия Серый Череп я имею в виду, что 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";

Должно работать. Вы уверены, что это базовая система аутентификации?Возможно, стоит просмотреть необработанные данные заголовка, используя что-то вроде ЧарльзПрокси чтобы убедиться, что это аутентификация (и тогда вы также сможете скопировать строку авторизации!).

Другие советы

Вот функция, которую я использую для выполнения 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); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top