curl vs python“;“请求”;当点击API时

curl vs python“;“请求”;当点击API时,python,curl,python-requests,bitbucket-api,Python,Curl,Python Requests,Bitbucket Api,我正在尝试访问我的帐户的Bitbucket API,成功的尝试如下所示: curl——用户屏幕名:mypasswordhttps://api.bitbucket.org/1.0/user/repositories 在命令行中。在python中,我尝试: import requests url = 'https://api.bitbucket.org/1.0/user/repositories' 然后 及 及 全部得到405个错误。API是 我想知道: 在请求版本中,我做错了什么?它们看起来都与

我正在尝试访问我的帐户的Bitbucket API,成功的尝试如下所示:

curl——用户屏幕名:mypassword
https://api.bitbucket.org/1.0/user/repositories

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

import requests
url = 'https://api.bitbucket.org/1.0/user/repositories'
然后

全部得到405个错误。API是

我想知道:

  • 在请求版本中,我做错了什么?它们看起来都与我的curl尝试相似

  • 使用curl和python请求模块进行请求有什么区别?当阅读带有curl示例的API,然后用python编写它时,我可以识别出什么样的通用模式

  • 多谢各位

    答复:

    它需要正确的标题

    更新:

    # ===============
    # 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)
    

    下面是一种使用Python的请求模块进行基本HTTP身份验证的方法:

    requests.post('https://api.bitbucket.org/1.0/user/repositories', auth=('user', 'pass'))
    
    另一种方式是传递用户/传递请求的有效负载,这是不需要的,因为HTTP basic auth在HTTP协议中有自己的位置

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

    >>> 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"
    }
    
    还有卷曲:

    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格式是另一回事,请查看以下链接:

    python方式应该是这样的:

    requests.post('https://api.bitbucket.org/1.0/repositories', auth=('user', 'pass'), data = "name=repo_name")
    

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

    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']
    

    ——curl中的user
    使用HTTP身份验证头。您的
    数据={“用户名”…
    解决方案将它们作为post数据包含。两者不是一回事,Bitbucket不太可能在post数据中查找。我喜欢那个httpbin站点,但我编辑了这个问题以显示我最近的尝试,它们不起作用我为此获得了405分too@codyc4321这超出了这个问题的范围,因为它不是curl/pythonrelatedNo,该请求使用“”作为url,您需要从中删除“用户”it@codyc4321太好了!如果你能分享正确的方法那就太好了
    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"
    }
    
    requests.post('https://api.bitbucket.org/1.0/repositories', auth=('user', 'pass'), data = "name=repo_name")
    
    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']