首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问API时curl与python“请求”

访问API时curl与python“请求”
EN

Stack Overflow用户
提问于 2015-06-25 21:37:54
回答 2查看 55.3K关注 0票数 26

我正在尝试为我的帐户命中Bitbucket API,成功的尝试如下:

curl --user screename:mypassword https://api.bitbucket.org/1.0/user/repositories

在命令行。在python中,我尝试:

代码语言:javascript
复制
import requests
url = 'https://api.bitbucket.org/1.0/user/repositories'

然后

代码语言:javascript
复制
r = requests.post(url, data={'username': myscreename, 'password':mypassword})

代码语言:javascript
复制
r = requests.post(url, data="myscreename:mypassword")

代码语言:javascript
复制
r = requests.post(url, data={"user": "myscreename:mypassword"})

全部得到405错误。API是https://confluence.atlassian.com/bitbucket/rest-apis-222724129.html

我想知道:

  1. 我在请求版本中做错了什么,它们看起来都类似于我的卷发尝试。
  2. 使用curl请求模块和python请求模块之间有什么区别?当我用一个卷发示例阅读一个API,然后用python编写它时,我能识别什么样的通用模式?

谢谢

答:

它需要正确的标题。

https://answers.atlassian.com/questions/18451025/answers/18451117?flashId=-982194107

更新:

代码语言:javascript
复制
# ===============
# get user
# ===============
import requests
import json

# [BITBUCKET-BASE-URL], i.e.: https://bitbucket.org/
url = '[BITBUCKET-BASE-URL]/api/1.0/user/'
headers = {'Content-Type': 'application/json'}

# get user
# [USERNAME], i.e.: myuser
# [PASSWORD], i.e.: itspassword
r = requests.get(url, auth=('[USERNAME]', '[PASSWORD]'), headers=headers)
print(r.status_code)
print(r.text)
#print(r.content)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-25 21:46:06

下面是一种使用Python的请求模块完成基本HTTP的方法:

代码语言:javascript
复制
requests.post('https://api.bitbucket.org/1.0/user/repositories', auth=('user', 'pass'))

另一种方式是传递用户/通过请求的有效负载,这是不需要的,因为在HTTP协议中有自己的位置。

如果您想通过请求“查看”引擎盖下发生了什么,我建议您使用httpbin:

代码语言:javascript
复制
>>> url = "http://httpbin.org/post"
>>> r = requests.post(url, data="myscreename:mypassword")
>>> print r.text
{
  "args": {}, 
  "data": "myscreename:mypassword", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "22", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.5.1 CPython/2.7.6 Darwin/14.3.0"
  }, 
  "json": null, 
  "origin": "16.7.5.3", 
  "url": "http://httpbin.org/post"
}

>>> r = requests.post(url, auth=("myscreename", "mypassword"))
>>> print r.text
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Authorization": "Basic bXlzY3JlZW5hbWU6bXlwYXNzd29yZA==", 
    "Content-Length": "0", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.5.1 CPython/2.7.6 Darwin/14.3.0"
  }, 
  "json": null, 
  "origin": "16.7.5.3", 
  "url": "http://httpbin.org/post"
}

卷曲:

代码语言:javascript
复制
curl -X POST --user myscreename:mypassword http://httpbin.org/post
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Authorization": "Basic bXlzY3JlZW5hbWU6bXlwYXNzd29yZA==", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.37.1"
  }, 
  "json": null, 
  "origin": "16.7.5.3", 
  "url": "http://httpbin.org/post"
}

请注意最后一个python示例与cURL示例之间的相似之处。

现在,正确处理API的格式是另一个故事,请查看以下链接:https://answers.atlassian.com/questions/94245/can-i-create-a-bitbucket-repository-using-rest-api

python的方式应该如下所示:

代码语言:javascript
复制
requests.post('https://api.bitbucket.org/1.0/repositories', auth=('user', 'pass'), data = "name=repo_name")
票数 25
EN

Stack Overflow用户

发布于 2020-02-28 19:05:35

使用python3,您可以使用json={.}而不是data={.},它将自动将标头设置为application/json:

代码语言:javascript
复制
import requests
url = 'https://api.bitbucket.org/1.0/user/repositories'

data = {
    'data1': 'asd',
    'data2': 'asd'
}
req = requests.post(url, auth=('user', 'password'), json = data)
data = req.json()
# data['index']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31061227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档