4

私が必要とするのは、最初の Web サイトから uid cookie を抽出し、それを使用して 2 番目の Web サイトを開くことです (これは一種の承認です)。

次のコードでも機能しません。

#!/usr/bin/env python
import urllib, urllib2, cookielib
import socket, Cookie
def extract(url):
 jar = cookielib.FileCookieJar("cookies")
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
 opener.addheaders = [('User-agent',
      'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20110201 Firefox/2.0.0.14')]

 response = opener.open(url)
 for cookie in jar:
    precious_value = cookie.value
 return precious_value

site1 = "mysite1.com"
site2 = "mysite2.com"

cp = urllib2.HTTPCookieProcessor()
cj = cp.cookiejar
cj.set_cookie(cookielib.Cookie(0, cookie_name, 
                               extract(site1), 
                               '80', False, 'domain', True, False, '/path',
                               True, False, None, False, None, None, None))
opener = urllib2.build_opener(urllib2.HTTPHandler(),cp)
opener.addheaders.append(('User-agent', 'Mozilla/5.0 (compatible)'))
print opener.open(site2).read()

この方法でもありません:

#!/usr/bin/env python
import urllib, urllib2, cookielib
def extract(url):
 jar = cookielib.FileCookieJar("cookies")
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
 opener.addheaders = [('User-agent',
   'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20110201 Firefox/2.0.0.14')]

 response = opener.open(url)
 for cookie in jar:
    precious_value = cookie
 return precious_value 

site1 = "mysite1.com"
site1 = "mysite2.com"

jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; 
en-GB; rv:1.8.1.14) Gecko/20110201 Firefox/2.0.0.14')]

opener.addheaders = [('Cookies', extract(site1))]
response = opener.open(site2)
print response.read()

ただし、「リクエスト」ライブラリを使用してここで成功することができました。コードは見栄えがします:

cookies= dict(mycid='9ti6cACUi6AqxXBG2H9AMPkrfRbBJPalKTAh_bLcuQ8c8C')
r = requests.get(url, cookies = cookies)
print r.text

それは私にとっては問題なく、リクエストに対して何もありません...しかし、最初の2回の試行で何が間違っていましたか? どちらの場合も、抽出手順は正常に機能し、uid が適切に抽出されていることがわかります。問題は add_headers 領域にあると思います。答えは明らかですが、それでも乗り越えることができます。誰か助けてくれませんか?

1) urllib または urllib2 のみでヘッダーに Cookie を渡す適切な方法は何ですか?

2)抽出されたオブジェクトへの参照だけでなく、変更可能なパラメーターとして渡すにはどうすればよいですか?

3)オブジェクト名/値として適切に渡すにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

0

ループdef extract(url):には 2 つの問題があります。

  1. 常に最後の値を返しますが、これは必ずしも Cookie の場所ではありません
  2. あなたが知ることができないクッキーが保存されている順序を推測します

(別の場所で定義されていると仮定してprecious_value います。それ以外の場合、このコードは機能しません)

関心のある特定の Cookie を取得するためにどのキーを使用する必要があるかを知るには、Chrome 開発者ツールを使用して、必要なサイトによって設定された Cookie の名前を確認できます。

お役に立てれば。

于 2013-01-02T00:30:51.957 に答える