【问题标题】:Sending POST request using PHP - Failure使用 PHP 发送 POST 请求 - 失败
【发布时间】:2017-05-31 20:26:05
【问题描述】:

我正在寻找一种在 PHP 中发送带有标头和内容的 POST 请求的方法,我在 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-8\r\n",
        '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 地址发送请求,因为那是不可能的。 这个开发商有什么秘密?

【问题讨论】:

    标签: php post


    【解决方案1】:

    503 表示功能正在运行,但您收到服务器拒绝访问的响应。如果你曾经尝试对谷歌结果进行 cURL 搜索,同样的事情也会发生,因为他们可以检测到 file_get_contents 和 cURL 使用的用户代理,从而阻止这些用户代理。

    命令不起作用的主要三个常见原因:

    1. 默认的 USER-AGENT 已被阻止。
    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),
        )
    );
    

    【讨论】:

    • 为什么第一个请求总是成功?就像它有时间限制一样,如果我每 20 秒刷新一次,它每次都有效,但是当我刷新太多次时,它似乎会阻止我。但是这个人实现了它(我上面提到的网址)我在一分钟内发送了 30 多个请求。如何
    • 我试过用户代理,不行。请求制造者没有发送用户代理...
    • @Darktwen 许多网站都有称为 DDoS 保护的东西,这有助于保护它们免受大量流量压倒其服务器的影响。有时间限制来阻止大量流量到达他们的网页。有很多方法可以增加他发出的请求数量,一种方法可能是他有很多 IP 地址来分发请求。另一种可能性是他在每次发布后都会清理他的 cookie 数据。我以前不得不处理这种事情,相信我——这并不容易。
    • @Darktwen 顺便问一下,这到底是干什么用的?你为什么要如此频繁地访问一个网页?
    • 因为它给了我我的视频网址,所以我可以在不访问客户区的情况下观看它们。他们说我在给定地址发送发布请求,然后我得到令牌作为我使用的答案,每次访问新视频时我都需要一个新的。长篇大论...
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2017-07-13
    • 2011-08-04
    相关资源
    最近更新 更多