Отправка POST запроса с помощью PHP-Failure

Я искал способ отправить POST запрос с заголовками и контентом на PHP, и я нашел отличное решение опубликовано здесь на stackoverflow, вот код:

<?php
$uid1 = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 8)), 0, 8);
$uid2 = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 4)), 0, 4);
$uid3 = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 4)), 0, 4);
$uid4 = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 4)), 0, 4);
$uid5 = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 12)), 0, 12);
$uid6 = substr(str_shuffle(str_repeat("0123456789", 1)), 0, 1);
$randuid = ("demo."."00000000"."-".$uid2."-".$uid3."-".$uid4."-".$uid5);
$url = 'https://www.something.com/rest/client/users/ticket/demo';
$data = array('password' => 'demo', 'deviceUid' => $randuid, 'deviceModelId' => '14');
$options = array(
        'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded; charset=UTF-8rn",
        'method'  => 'POST',
        'content' => http_build_query($data),
    )
);

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);

?>

Я получил совершенно хороший ответ, но когда я пытаюсь во второй раз, я ничего не получаю. Когда я изменяю свой IP-адрес, я положительный ответ снова, а затем снова во второй раз это не будет работать.
Это дает мне следующую ошибку:

не удалось открыть поток: не удалось выполнить HTTP-запрос! Служба HTTP/1.1 503 временно > > > недоступна

Но когда я делаю запрос на http://requestmaker.com/
Я отправил более 1000 запросов на этом сайте, и он работал безупречно каждый раз.
То, что этот парень сделал, потрясающе, насколько я знаю, этот файл отправляет запросы
http://requestmaker.com/requester.php но больше информации нет.
Он не отправляет запросы с нового ip-адреса каждый раз, потому что это невозможно.
В чем секрет этого разработчика?

1 ответ

  1. 503 означает, что функции работают, но вы получаете ответ от сервера, отказывающего в доступе. Если вы когда-либо пытались свернуть результаты google, происходит то же самое, потому что они могут обнаружить пользовательский агент, используемый file_get_contents и cURL, и в результате заблокировать эти агенты пользователей.

    В основном три общие причины, почему команды не будут работать:

    1. Агент пользователя по умолчанию заблокирован.
    2. Блок IP вашего сервера заблокирован.
    3. Удаленный хост имеет обнаружение прокси.

    Я также был в подобной ситуации, но все, что я сделал, это добавил User-Agentзаголовок и установил его в агент пользователя браузера, который я использую. Например что-то вроде этого:

    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
    

    Это может сработать:

    $options = array(
            'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
            'method'  => 'POST',
            'content' => http_build_query($data),
        )
    );