格式化JSON与python请求封装的post命令...?URL中的jsonRequest参数

问题描述:

我正在尝试向USGS EarthExplorer库存API提交POST请求。这从简单的登录开始。他们有一个测试页:格式化JSON与python请求封装的post命令...?URL中的jsonRequest参数

https://earthexplorer.usgs.gov/inventory/documentation/test

,让你看到一些格式的例子。对于登录的例子,我能提取提交按钮按下的URL(用户和PW已经改变):

https://earthexplorer.usgs.gov/inventory/json/v/1.4.0/login?jsonRequest=%7B%22username%22%3A%22user%22%2C%22password%22%3A%22pw%22%2C%22catalogId%22%3A%22EE%22%7D

不过,我似乎无法弄清楚如何格式化这个在Python中使用请求库。我向其他人开放,但现在正在使用请求。我曾尝试创建一个字典为:

creds = {"username": "user", 
    "password": "pw", 
    "authType": "", 
    "catalogId": "EE"} 

payload = json.dumps(creds) 

当我打电话requests.post(url, json=payload)我告诉我的用户名参数不存在。我也尝试过其他关键字,例如数据和参数。

我注意到在成功URL的参数jsonRequest,所以我试图创造与一个字典里为:

creds2={"jsonRequest": [{"username": "user", 
        "password": "pw", 
        "authType": "", 
        "catalogId": "EE"}]} 

但这也不管用。

有什么建议吗?谢谢!

您必须发送一个GET请求并使用params参数在查询字符串中传递creds。

creds = { 
    "username": "user", 
    "password": "pw", 
    "authType": "", 
    "catalogId": "EE" 
} 
url = 'https://earthexplorer.usgs.gov/inventory/json/v/1.4.0/login' 
r = requests.get(url, params={'jsonRequest':json.dumps(creds)}) 
print(r.json()) 
+0

真棒,感谢这工作。我用post命令也试过了,都很好。 – JoeMcG