0

In one of the answers that I have received here,我遇到了一個問題,就是不知道如何通過「Google App Engines」自動將我的ID和密碼傳遞給一個網站,我是一個註冊用戶並擁有一個賬戶。我給了我一個建議:「檢查401的HTTP狀態代碼,」需要授權「,並提供網站所要求的HTTP授權(基本,摘要,不管)。」我不知道如何檢查狀態碼。任何人都可以,請告訴我該怎麼做?如何檢查401的HTTP狀態碼?

+++++++++++++++++++++++++++++++++

附加信息:

如果我使用谷歌應用程序引擎這種方式(獲取我的易趣摘要頁面的網址):

from google.appengine.api import urlfetch 
url = "http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1&CurrentPage=MyeBaySummary&ssPageName=STRK:ME:LNLK" 
result = urlfetch.fetch(url) 
if result.status_code == 200: 
    print "content-type: text/plain" 
    print 
    print result.status_code 

我總是得到「200」,而不是「401」

回答

2

在普通Python代碼,我可能會使用較低級別的httplib,例如:

import httplib 

domains = 'google.com gmail.com appspot.com'.split() 

for domain in domains: 
    conn = httplib.HTTPConnection(domain) 
    conn.request('GET', '/') 
    resp = conn.getresponse() 
    print 'Code %r from %r' % (resp.status, domain) 

這會告訴你這樣的代碼爲301(永久移動)和302(臨時移動);像urllib2這樣的更高級別的庫會爲你「幕後」處理這種事情,這很方便,但卻讓你更難控制簡單性(你必須安裝自己的「url opener」對象等)。

在App Engine中,您最好使用urlfetch,它返回一個response object並具有status_code屬性。如果該屬性爲401,則意味着您需要重複提取頭中適當類型的授權信息。

但是,App Engine現在也支持urllib2,所以如果您對使用這種更高級別的抽象層感到舒服,則可以將工作委託給它。請參閱here以獲取有關如何將基本身份驗證委派給urllib2和教育here的教程,以獲取有關基本身份驗證如何工作的更一般教程(我相信,即使您使用更高級別的抽象層,瞭解底層抽象層中發生的情況也可以幫助您層!-)。

+0

亞歷克斯,謝謝你再次回答。 (1)「...如果這個屬性是401,這意味着你需要重複...」 - 我總是得到「200」(請檢查上面的代碼,我剛剛添加到這個問題的主要領域) ; (2)感謝您的鏈接。我正在研究他們; – brilliant 2009-12-14 16:38:36

+0

亞歷克斯,我只是想通讀你在這裏提供的那兩個鏈接,這對我來說太過分了。我想我會堅持AppEngine-urlfetch的方式。 – brilliant 2009-12-14 17:21:46

+1

@brilliant,你會得到200的,因爲urllib2代表你在「幕後」做事;這很方便,但讓理解和控制有點難度。對於簡單的基本身份驗證/ urlfetch(希望您不需要更高級的摘要身份驗證),請參閱http://chillorb.com/?p=195(包括simpx的評論,它需要使事情工作;-)。 – 2009-12-14 18:56:06

1

除非我不完全理解你的問題,您可以從Response Object usin中獲取返回碼g status_code屬性。

首先,您必須向要測試的URL發出fetch()

+0

你好jldupont !!!感謝yu的回覆。如果我用你建議的方式,我總是得到200號,這就是我得到的。請檢查我剛纔添加到此問題的主要字段中的代碼。 – brilliant 2009-12-14 16:35:47

+0

嗯...你指的是經過驗證的請求呢?您需要在請求的標題中提供信息。 'fetch()'函數允許設置標題字段。 – jldupont 2009-12-14 16:39:31

+0

謝謝,jldupont!我會花一些時間來研究它。 – brilliant 2009-12-15 18:34:33

1

大多數面向用戶的網站不使用HTTP身份驗證,而是傾向於使用基於Cookie的身份驗證,並使用HTML表單進行登錄。如果您想在您自己的代碼中複製該代碼,則需要對相關應用程序的登錄URL發出HTTP POST請求,並捕獲發回的cookie,包括將來所有請求中的身份驗證。如果沒有關於您要驗證的特定網站的更多詳細信息,則很難更具體。

+0

謝謝你,尼克,這個輸入。我會花一些時間查看Alex提供的材料,然後再回顧一下具體細節。 – brilliant 2009-12-15 18:47:02

1

你沒有得到401,因爲該網站沒有返回401但總是200。通常我們爲網站編碼的類型是返回200,並在頁面上顯示「請登錄..blah blah」,如果網站返回200以外的任何其他瀏覽器將不會顯示時髦的錯誤消息。

所以簡而言之,就像我在其他問題中提到的那樣,您需要查看登錄頁面,查看它使用的參數e。g登錄= xxx,密碼= yyy,將其發佈到該頁面,並且您也必須管理這些cookie,即像斜紋等庫進入圖片。

+0

謝謝Anurag Unival!我有點擔心這種可能性必須處理餅乾,但你的這個答案給了我一些希望。 – brilliant 2009-12-15 18:44:16

+0

Anurag,這裏是你建議的延續。如果您有時間和願望,請查看:http://stackoverflow.com/questions/1914275/googles-app-engine-python-how-to-get-parameters-from-a-log-in-pages – brilliant 2009-12-16 12:12:25