Почему я получаю ошибку после передачи данных - PullRequest
0 голосов
/ 20 мая 2019

У меня есть два сценария, которые должны обмениваться данными между двумя доменами без использования браузера. Отправитель всегда говорит мне, что данные не могут быть отправлены правильно. Но так как я не получаю сообщение 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>
)

1 Ответ

0 голосов
/ 20 мая 2019

Когда два сценария были в одном Домене в начале, достаточно было указать путь следующим образом:

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

Но когда сценарии находятся в разных доменах, вам нужно указать путь с полным доменом:

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