【问题标题】:Why do i get an error after data-transfer为什么数据传输后会出现错误
【发布时间】:2019-10-06 13:32:11
【问题描述】:

我有两个脚本,它们可以在不使用浏览器的情况下在两个域之间交换数据。发件人总是告诉我数据无法正确发送。但是因为我没有收到error1 消息,所以连接本身应该是正确建立的。

奇怪的是,当两个脚本位于同一主域的不同子域时,它已经起作用了。现在我将发件人移动到不同域的子域,现在得到错误。两个域都在同一台服务器上,具有相同的 ip,当然都具有 ssl 证书。

这是发送脚本:

    $fp = fsockopen("ssl://check.target.com", 443, $errno, $errstr, 30);
    if (!$fp){
        die('error1');
    }else{
        $path = '/api/vk_register.php';
        $host = 'https://check.target.com';
        $referer = $_SERVER['SERVER_NAME'];
        fputs($fp, "POST /$path HTTP/1.1\r\n");
        fputs($fp, "Host: $host\r\n");
        fputs($fp, "Referer: $referer\r\n");
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $data_to_send);

        while (!feof($fp))
            $return[] = fgets($fp);
        fclose($fp);
    // handling of $return
    }

这是接收者:

    $token = $_POST['token'];
    $firstname = urldecode($_POST['firstname']);
    $name = urldecode($_POST['name']);
    $vkkdnr = $_POST['vkkdnr'];
    $checksum = $_POST['checksum'];
    $sender = $_SERVER["HTTP_REFERER"];

    // handling the transferred data //

    $fp = fsockopen($sender, 443, $errno, $errstr, 30);
    if (!$fp){
        echo "$errstr ($errno)<br />\n";
    }else{
        $path = '/ptreg_send.php';
        $host = $sender;
        $referer = $_SERVER['SERVER_NAME'];
        fputs($fp, "POST /$path HTTP/1.1\r\n");
        fputs($fp, "Host: $host\r\n");
        fputs($fp, "Referer: $referer\r\n");
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $data_to_send);

        while (!feof($fp)){
            $return2[] = fgets($fp,128)."#";
        }
        fclose($fp);
    }

打印 $return2 会带来:

Array
(
    [0] => HTTP/1.1 400 Bad Request
    [1] => Date: Fri, 17 May 2019 15:03:33 GMT
    [2] => Server: Apache
    [3] => Content-Length: 347
    [4] => Connection: close
    [5] => Content-Type: text/html; charset=iso-8859-1
    [6] =>
    [7] => <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    [8] => <html><head>
    [9] => <title>400 Bad Request</title>
    [10] => </head><body>
    [11] => <h1>Bad Request</h1>
    [12] => <p>Your browser sent a request that this server could not understand.<br />
    [13] => </p>
    [14] => <p>Additionally, a 400 Bad Request
    [15] => error was encountered while trying to use an ErrorDocument to handle the request.</p>
    [16] => </body></html>
)

【问题讨论】:

  • 如果您想通了,请将其作为答案发布;)

标签: php data-transfer


【解决方案1】:

当两个脚本一开始在同一个域时,这样给出路径就足够了:

    $path = '/api/vk_register.php';

但是当脚本在不同的域时,你需要给出完整域的路径:

    $path = 'https://example.com/api/vk_register.php';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多