如何防止在python 2.7中使用大寫頭部的urllib2.Request類的默認動作。當我創建一個urllib2.Request類實例並在默認情況下傳遞頭部大小寫時,我希望頭部大寫當我提出請求時,我該如何做同樣的事情。我做請求的Webservice接受大寫頭(例如HTTP_REQUEST_VAL)。如何防止在python 2.7中大寫頭文件的urllib2.Request類的默認動作?
在此先感謝
如何防止在python 2.7中使用大寫頭部的urllib2.Request類的默認動作。當我創建一個urllib2.Request類實例並在默認情況下傳遞頭部大小寫時,我希望頭部大寫當我提出請求時,我該如何做同樣的事情。我做請求的Webservice接受大寫頭(例如HTTP_REQUEST_VAL)。如何防止在python 2.7中大寫頭文件的urllib2.Request類的默認動作?
在此先感謝
HTTP標頭名是不區分大小寫按照規範,但如果你的web服務似乎與那個問題,你將不得不訴諸一些黑客,正如標題外殼是硬連線進入urllib2。除非你想把圖書館的一半子類去掉,否則就沒有辦法解決它了。
另一種方法是子類str
,並使用SafeString('foo')
,而不是'foo'
的頭名,但似乎像一個壞黑客:
class SafeString(str):
def title(self):
return self
def capitalize(self):
return self
更好的解決方案是使用Requests,這不修改你的頭文件:
import requests
requests.get('http://example.com', headers={
'EXAMPLE-header': 'foo'
})
請注意,OP很可能會受到CGI標準設置環境變量與全部大寫頭中帶下劃線和HTTP_前綴的環境變量的混淆。設置'Request-Val'頭部的可能性非常大,*不會與請求頭部客戶端混淆。 –
r.headers ['HTTP_REQUEST_VAL'] ='foo'不起作用大寫標題 –
@carol:我猜urllib2比我想象的更壞。查看我的更新。 – Blender
你似乎混淆了CGI標準處理標題與所需的標題。 'HTTP_REQUEST_VAL'是'Request-Val' HTTP頭的CGI版本,**不是**,頭部匹配區分大小寫。 –
並且要清楚:HTTP_REQUEST_VAL環境變量是通過大寫HTTP標頭,用下劃線替換破折號,並在標頭名稱前面加上'HTTP_'來設置的。這也意味着(根據HTTP RFC標準的要求)標頭匹配是*不區分大小寫*。 –