ошибка 56 cURL: ошибка при получении данных от однорангового узла при отправке XML-запроса - PullRequest
0 голосов
/ 13 ноября 2018

Я пытался преобразовать curl в жрет, но я получил ошибку cURL error 56: Failure when receiving data from the peer.Вот то, что у меня есть.

curl_test.php, который работает

    $username = "admin";
    $password= "password";
    $request_xml = '<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE telco_xml_enq SYSTEM "telco_xml_enq.dtd">
      <person>
          <individual>
            <user_id>1234</user_id>
            <full_name>test</full_name>
          </individual>
        </body>
      </person>';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 4);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, "XML_STRING=" . $request_xml);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
    $response     = curl_exec($ch);
    return $response;

guzzle_test.php не работает

    $request_xml = '<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE telco_xml_enq SYSTEM "telco_xml_enq.dtd">
      <person>
          <individual>
            <user_id>1234</user_id>
            <full_name>test</full_name>
          </individual>
        </body>
      </person>';
    $client = new Client(["verify"=>false,
                "auth"=>["admin","password"
    ]
    ]);
    $options = [
        "headers"=>
            ["Content-Type"=>"text/xml"],
        "body"=>$requestXml
    ];
    $response = $client->request("POST",$url,$options]);
    $res = $response->getBody();

Можете ли вы помочь мне с этим?

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вам необходимо использовать form_params вместо body для отправки формы на сервер. Попробуйте код ниже.

$request_xml = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE telco_xml_enq SYSTEM "telco_xml_enq.dtd">
  <person>
      <individual>
        <user_id>1234</user_id>
        <full_name>test</full_name>
      </individual>
    </body>
  </person>';
$client = new Client(["verify"=>false,
            "auth"=>["admin","password"
]
]);
$options = [
    "form_params"=>[
        'XML_STRING' => $requestXml,
    ],
];
$response = $client->request("POST",$url,$options]);
$res = $response->getBody();
0 голосов
/ 13 ноября 2018

Похоже, вы должны использовать XML_STRING в качестве значения сообщения в body. Из-за этого получатель не может получить значения и, следовательно, выдает ошибку.

$options = [
    "headers"=>
        ["Content-Type"=>"text/xml"],
    "body" => "XML_STRING=".$requestXml
];
...