[英]POST Request not supported by Google Server
將請求從服務器發布到google.com時出現以下錯誤:
警告:file_get_contents(http://accounts.google.com):無法打開流:HTTP請求失敗! 第23行的C:\\ ... \\ index.php中不允許HTTP / 1.0 405方法
我的代碼如下:
$postdata = http_build_query(
array(
'code' => '####',
'client_id' => '####',
'client_secret' => '####',
'grant_type' => 'authorization_code'
)
);
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://accounts.google.com', false, $context);
echo $result;
您選擇的方法是“ PUT”而不是“ POST”。 如果您想以POST形式發送請求,請更改
'方法'=>'PUT'
至
'方法'=>'開機自檢'
首先,您在這里得到的是響應碼(405),它在錯誤類之內(400到499或也寫為4xx )。
因此,服務器會在協議級別向您報告錯誤。 所使用的協議也被命名為:HTTP,更具體地說是HTTP / 1.0。
RFC1945中概述了包括狀態代碼的HTTP / 1.0:
這里的問題是沒有定義代碼405(作為具體數字)。 因此,文檔會退回到4xx的常規說明中獲取錯誤代碼 。
RFC2616中概述了HTTP / 1.1:
但是,它具有405錯誤代碼的詳細信息 ,如代碼示例中的響應標頭所示:
// ...
$result = file_get_contents('http://accounts.google.com', false, $context);
var_dump($http_response_header);
輸出:
array(6) {
[0] => string(31) "HTTP/1.0 405 Method Not Allowed"
[1] => string(38) "Content-Type: text/html; charset=UTF-8"
[2] => string(19) "Content-Length: 958"
[3] => string(35) "Date: Thu, 24 Oct 2013 12:03:09 GMT"
[4] => string(15) "Server: GFE/2.0"
[5] => string(27) "Alternate-Protocol: 80:quic"
}
所需的響應列表顯示了另一個協議沖突,因為所需的Allow標頭不是響應的一部分。 它將表明允許哪些方法。
因此,您所能做的就是嘗試使用常見的HTTP方法而不是PUT來工作,您可能正在尋找POST。 讓我們用POST運行示例,但是沒有運氣:
警告:file_get_contents(http://accounts.google.com):無法打開流:HTTP請求失敗! 此URL不支持HTTP / 1.0 405 HTTP方法POST
我建議您與Google(向其發送HTTP請求的在線服務的供應商)聯系,並詢問您需要與之匹配的技術規格。 出於調試目的,我建議您閱讀有關PHP的特殊$http_response_header
變量的信息,我有一些示例代碼和說明,以及一些有關使用PHP的HTTP Wrapper處理錯誤的提示:
使用錯誤的URI(這就是為什么您沒有獲得允許的方法標頭的原因)。 通過https://accounts.google.com/o/oauth2/token檢索訪問令牌是必需的。
無關:您的發布數據缺少必需的“ redirect_uri”。
這太晚了,希望對我這樣的人有所幫助。
有兩個問題。 首先,不能使用client_secret
生成訪問令牌。 因此,要成功發送請求,必須包含client_secret
。
其次,谷歌想識別client_id
,因此它也應該是POST
參數的一部分。
用於生成訪問令牌的正確參數應類似於
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata,
'client_id' => '######################',
'client_secret' => '##########################'
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.