2013-08-16 16 views
1

如何防止在python 2.7中使用大寫頭部的urllib2.Request類的默認動作。當我創建一個urllib2.Request類實例並在默認情況下傳遞頭部大小寫時,我希望頭部大寫當我提出請求時,我該如何做同樣的事情。我做請求的Webservice接受大寫頭(例如HTTP_REQUEST_VAL)。如何防止在python 2.7中大寫頭文件的urllib2.Request類的默認動作?

在此先感謝

+0

你似乎混淆了CGI標準處理標題與所需的標題。 'HTTP_REQUEST_VAL'是'Request-Val' HTTP頭的CGI版本,**不是**,頭部匹配區分大小寫。 –

+0

並且要清楚:HTTP_REQUEST_VAL環境變量是通過大寫HTTP標頭,用下劃線替換破折號,並在標頭名稱前面加上'HTTP_'來設置的。這也意味着(根據HTTP RFC標準的要求)標頭匹配是*不區分大小寫*。 –

回答

4

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' 
}) 
+0

請注意,OP很可能會受到CGI標準設置環境變量與全部大寫頭中帶下劃線和HTTP_前綴的環境變量的混淆。設置'Request-Val'頭部的可能性非常大,*不會與請求頭部客戶端混淆。 –

+0

r.headers ['HTTP_REQUEST_VAL'] ='foo'不起作用大寫標題 –

+0

@carol:我猜urllib2比我想象的更壞。查看我的更新。 – Blender