为什么我的 POST file_get_contents 返回 HTTP 错误请求?
Why is my POST file_get_contents returning HTTP Bad Request?
这是我的代码:
$url = 'http://99.99.99.999:12480/rs/AuthorizationSession';
$credentials = 'admin:system';
$base64 = base64_encode($credentials);
// Set header text.
$header = "Content-type: application/json\r\n" .
"Accept: application/json\r\n" .
"RESTAuthorization: " . $base64;
// Set data.
$postdata = http_build_query(
array(
"authorization" => $base64
)
);
// Set options - POST.
$opts = array("http" =>
array(
"method" => "POST",
"header" => $header,
"content" => $postdata
)
);
// Create context and execute.
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
我不断收到:file_get_contents(http://99.99.99.999:12480/rs/AuthorizationSession): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
显然我更改了IP。这适用于 GET 请求,但不适用于 POST.
我想我的 header 或 post 数据一定有问题,但我想不通。
想法?
http_build_query()
将数组转换为 URL-encoded 查询字符串,例如 name=john&password=s3cr3t
但您发送的 Content-Type
header 表示 POST数据在 JSON.
需要更改请求以反映正确的 Content-Type(application/x-www-form-urlencoded
,或者 http_build_query
应该 json_encode()
以将数据发送为 JSON.
就目前而言,服务器感到困惑,因为您告诉它您正在发送 JSON,而不是发送一个 URL 编码的字符串(所以本质上是 JSON 解析远程失败)并生成错误请求。
如果您的代码使用 GET,但 POST 失败,这听起来像是目标服务器上位于 99.99.99.999:12480 的主机可能未配置为接受 POST 请求。
这是我的代码:
$url = 'http://99.99.99.999:12480/rs/AuthorizationSession';
$credentials = 'admin:system';
$base64 = base64_encode($credentials);
// Set header text.
$header = "Content-type: application/json\r\n" .
"Accept: application/json\r\n" .
"RESTAuthorization: " . $base64;
// Set data.
$postdata = http_build_query(
array(
"authorization" => $base64
)
);
// Set options - POST.
$opts = array("http" =>
array(
"method" => "POST",
"header" => $header,
"content" => $postdata
)
);
// Create context and execute.
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
我不断收到:file_get_contents(http://99.99.99.999:12480/rs/AuthorizationSession): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
显然我更改了IP。这适用于 GET 请求,但不适用于 POST.
我想我的 header 或 post 数据一定有问题,但我想不通。
想法?
http_build_query()
将数组转换为 URL-encoded 查询字符串,例如 name=john&password=s3cr3t
但您发送的 Content-Type
header 表示 POST数据在 JSON.
需要更改请求以反映正确的 Content-Type(application/x-www-form-urlencoded
,或者 http_build_query
应该 json_encode()
以将数据发送为 JSON.
就目前而言,服务器感到困惑,因为您告诉它您正在发送 JSON,而不是发送一个 URL 编码的字符串(所以本质上是 JSON 解析远程失败)并生成错误请求。
如果您的代码使用 GET,但 POST 失败,这听起来像是目标服务器上位于 99.99.99.999:12480 的主机可能未配置为接受 POST 请求。