2017-10-29 1 views
-1

私はPythonコードで自動的にapiキーを取得したいと思います。 ここで私は手でapiキーを取得します。手でpython3でフォームを投稿するときにリクエストCookieを設定するにはどうすればよいですか?

    1. オープンhttps://www.alphavantage.coクリックGet your Free API Key Today
    2. 入力
    3. Firefoxでfirst_namelast_nameemail
    4. get free api keyをクリックします。

    enter image description here

    2.Byコード

import urllib.request, urllib.parse, urllib.error 
import http.cookiejar 

LOGIN_URL = 'https://www.alphavantage.co/support/#api-key' 
params = { 
      "first": "xx", 
      "last": "yy", 
      "occupation": "investor", 
      "email":"[email protected]" 
} 

headers = { 
"Accept-Language":"en-US,en;q=0.8", 
"Connection":"keep-alive", 
"Content-Length":"77", 
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8", 
"Cookie":"csrftoken=qTbVt3HN2VYiDbJgX1n9DdyaDUYKpMyJ1UvTE3xCplYZcAYk9OQaXJ1F6ACadcjA; _ga=GA1.2.1054357644.1509295038; _gid=GA1.2.1986003924.1509295038; _gat=1", 
"Host":"www.alphavantage.co", 
"Origin:https":"//www.alphavantage.co", 
"Referer:https":"//www.alphavantage.co/support/", 
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36", 
"X-CSRFToken":"l7RRVpYomq6fIvjAnuYJiR0xquqoeD5gXrlowpQqejCCKX65OUrUcZzw2ljf9SPB", 
"X-Requested-With":"XMLHttpRequest" 
} 

postdata = urllib.parse.urlencode(params).encode() 
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36' 

cookie = http.cookiejar.MozillaCookieJar() 
handler = urllib.request.HTTPCookieProcessor(cookie) 
opener = urllib.request.build_opener(handler) 
request = urllib.request.Request(LOGIN_URL, postdata, headers) 
response = opener.open(request) 

エラー情報:

raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 499: Client Disconnected 

クッキーヘッダにはstep1.2で作成されたリクエストクッキー、です。

手ではなく、Pythonコードでapiキーを取得するにはどうすればよいですか?

target website

+0

こんにちは、私の理解から、あなたが得れば

params = { "first_text": "xx", "last_text": "yy", "occupation_text": "investor", "email_text":"[email protected]" } 

そして、あなたは3つしかヘッダを必要とします。フィールド名が異なっていますこのサイトのAPIキーを使用すると、以後そのAPIキーを使用し続けることができます。そのAPIキーを使用してサーバーに照会します。 –

答えて

1
import urllib.request, urllib.parse, urllib.error 
import http.cookiejar 

LOGIN_URL1 = 'https://www.alphavantage.co/support/#api-key' 

cookie = http.cookiejar.MozillaCookieJar() 
handler = urllib.request.HTTPCookieProcessor(cookie) 
opener = urllib.request.build_opener(handler) 
request = urllib.request.Request(LOGIN_URL1) 
response = opener.open(request) 
for item in cookie: 
    x=item.value 

LOGIN_URL2 = 'https://www.alphavantage.co/create_post/' 
params = { 
"first_text": "xx", 
"last_text": "yy", 
"occupation_text": "Investor", 
"email_text": "[email protected]" 
} 

headers = { 
"Referer": "https://www.alphavantage.co/support/", 
"Cookie": "csrftoken={0}".format(x), 
"X-CSRFToken":"{0}".format(x) 
} 

postdata = urllib.parse.urlencode(params).encode() 
req = urllib.request.Request(LOGIN_URL2, postdata, headers) 
response = urllib.request.urlopen(req) 
print(response.read()) 
0

あなたのコードに2つの間違いがあります。

最初。 POST要求は/create_post/エンドポイントに送信する必要があります。

秒。 、X-CSRFToken

全コードRefererCookie

import requests 


headers = { 
    "Referer": "https://www.alphavantage.co/support/", 
    "Cookie": "csrftoken=YOURTOKEN", 
    "X-CSRFToken":"YOURTOKEN" 
} 
params = { 
    "first_text": "a", 
    "last_text": "b", 
    "occupation_text": "Student", 
    "email_text": "[email protected]" 
} 
response = requests.post("https://www.alphavantage.co/create_post/", 
         data=params, headers=headers) 
print(response.text) 
関連する問題