[英]httpful POST request: get raw HTTP message
我使用 httpful 发布消息:
try
{
$ret = \Httpful\Request::post($url)
->addHeaders(array(
'Content-Type' => 'application/x-www-form-urlencoded'
))
->body("mystring=".urlencode($msg))
->send();
} catch (Exception $e)
{
trigger_error("Exception :".$e->getMessage()."\n");
}
对方系统无法读取,也无法输出调试信息——如何获取实际发送的原始 HTTP 消息(包括标题、分隔符等)?
try {
$url = 'https://httpbin.org/post1'; // hasErrors
// $url = 'https://httpbin.org1/post'; // ConnectionErrorException
$msg = 'qwe';
$req = \Httpful\Request::post($url)
->addHeaders([
'Content-Type' => 'application/x-www-form-urlencoded',
])
->body('mystring=' . urlencode($msg));
$res = $req->send();
if ($res->hasErrors()) {
print_r("
<pre>
*** REQUEST ***
Headers: {$req->raw_headers}
Body: {$req->payload}
*** RESPONSE ***
Headers: {$res->raw_headers}
Body: <xmp>{$res->raw_body}</xmp>
</pre>
");
}
} catch (\Httpful\Exception\ConnectionErrorException $e) {
if (isset($req)) {
print_r("
<pre>
*** REQUEST ***
Headers: {$req->raw_headers}
Body: {$req->payload}
</pre>
");
}
if (isset($res)) {
print_r("
<pre>
*** RESPONSE ***
Headers: {$res->raw_headers}
Body: <xmp>{$res->raw_body}</xmp>
</pre>
");
}
}
要获取实际发送的数据,我觉得最可靠的方法是访问实际发送的数据,即发送后的数据。 否则你永远无法确定。
为此,您可以拦截 HTTP stream 或者,为了使事情更容易,您可以欺骗服务器将 URL 解析为实际的代理。 使用适当的证书或信任相同的指令,您可以访问整个请求以及整个响应,以及时间、原始数据和作品。
我通常使用自定义 HTTPS MitM 模块来执行此操作,但有几种选择(只是谷歌“记录 https 代理”) - 我刚刚发现的一个是MockServer ,它似乎支持多种场景。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.