标签: python-requests

golang 中的原始 http 响应

我有一个向端点发出的请求,但由于某种原因,响应正文仅包含响应的最后一行(整个响应在 fiddler 中捕获)。如果我使用 requests 模块在 python 中重新创建请求,也会发生同样的事情。但是,我注意到如果我在 python 中获取整个原始响应,我能够看到所有行(由多个 分隔\r)。我想知道是否可以像response.raw.datapython 中的方法一样查看 go 中的整个原始响应。换句话说,有没有一种方法可以查看整个文本响应,而不是切断除最后一行之外的所有内容?如果有人知道为什么最后一行被切断,我们也会非常感激。

澄清一下,这只发生在这个单一端点上,我怀疑\r响应正文中的 s 可能是罪魁祸首,但我不确定。我还没有从任何其他 http 响应中看到这种行为。

编辑:这是我用来查看响应的代码

bodyB, _ := ioutil.ReadAll(resp.Body)
bodyStr := string(bodyB)
Run Code Online (Sandbox Code Playgroud)

python networking http go python-requests

1
推荐指数
1
解决办法
4564
查看次数

Python 请求:断言 status_code 没有失败

如果 api 调用返回 403 代码,我会尝试使测试失败并显示特定错误消息。我尝试了几个选项:

if int(addresses.status_code) is 403:
    fail("Auth Error: Missing Role {}".format(response.json()))

assert addresses.status_code is not 403

assert addresses.status_code is not codes.forbidden

assert addresses.status_code is codes.ok
Run Code Online (Sandbox Code Playgroud)

其中唯一失败的是最后一个assert addresses.status_code is codes.ok。然而,api 调用响应的状态代码是403。我已经尝试过确保类型相同等,但不确定还能去哪里。

如何测试 status_code 是否不是特定值?

python python-requests

1
推荐指数
1
解决办法
5181
查看次数

如何通过python通过不同的IP发送GET请求?

我目前正在尝试从深度学习交易所收集数据。问题是我需要高分辨率(秒间隔)的数据,因此我为每种货币创建大量 GET 请求。但我确实很快就达到了 API 的极限。

我想知道是否有可能通过公共代理服务器路由 GET 请求,以声明拥有不同的 IP 地址,以便使用 Raspberry PI 发出尽可能多的请求。

python https proxy python-requests

1
推荐指数
1
解决办法
4273
查看次数

重试 python requests 模块挂起

我必须使用请求模块来获取大量 URL。由于网络错误,我想实现重试机制。所以我的代码如下所示:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import requests

session = requests.Session()
retry = Retry(total=1,backoff_factor=0.5,status_forcelist=(500,502,504,503))
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://',adapter)        
head_response = session.get(url,timeout=2)
Run Code Online (Sandbox Code Playgroud)

但是,当 URL 为 tiffins.NET 时,代码会一直挂起。timeout=2 的普通 requests.get 会给出 503 状态代码,但不会挂起。

难道我做错了什么?

我正在使用 python 2.7.15rc1。

python python-2.7 python-requests

1
推荐指数
1
解决办法
1005
查看次数

Python如何获取图像然后POST(通过请求库)

我正在使用 python 尝试get从一个 API 获取图像,然后将post其传输到另一个 API。

到目前为止我有这个代码:

def create_item(token, user_id):
    url = '<api_url_to_post_to>'
    headers = {"Authorization": "Token {0}".format(token)}

    image_url = '<some_random_image_url>'
    image_obj = requests.get(image_url)

    data = {
        "image": image_obj.content
    }

    r = requests.post(url, headers=headers, files=data)
    response = r.json()

    print(response)

    return response
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试使用post第二个 API 时,我收到“不允许使用文件扩展名”。错误。file这显然是一个自定义错误消息,但它表示我正在执行的操作有问题post。

关于我可能做错了什么有什么建议吗?

python django post get python-requests

1
推荐指数
1
解决办法
599
查看次数

使用socks5代理的Python请求

我已经部署了一个AWS ec2实例来使用代理。我已经编辑了安全策略并允许我的机器访问服务器。我使用端口 22 作为 SSH,使用端口 4444 作为代理。由于某种原因,我仍然无法使用代理启动会话。

代码:

import requests

session = requests.Session()
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
headers = {'user-agent' : user_agent}
proxies = {
    'http' : 'socks5h://ec2-ip-address-here.us-east-2.compute.amazonaws.com:4444',
    'https' : 'socks5h://ec2-ip-address-here.us-east-2.compute.amazonaws.com:4444',
}

print(session.get('https://www.ipchicken.com/', headers=headers, proxies=proxies).content)
Run Code Online (Sandbox Code Playgroud)

错误:

requests.exceptions.ConnectionError: SOCKSHTTPSConnectionPool(host='www.ipchicken.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x107a09048>: Failed to establish a new connection: [Errno 61] Connection refused'))
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么。我按照此视频https://www.youtube.com/watch?v=HOL2eg0g0Ng来设置服务器。感谢所有提前回复的人。

python amazon-ec2 socks python-3.x python-requests

1
推荐指数
1
解决办法
5311
查看次数

HTTPSConnectionPool SSL 错误 证书验证失败

我正在研究一些特定网站的网络抓取,因此我使用 python 3 requests 包和 beautifulsoup。在对某些网站进行测试时,我收到此错误:

requests.exceptions.SSLError: HTTPSConnectionPool(host='autoglassbodyrepair.lawshield.co.uk', port=443): 超过 url 的最大重试次数: / (由 SSLError(SSLError("握手错误: Error([('SSL 例程) ', 'tls_process_server_certificate', '证书验证失败')],)",),))


import requests as rq
import bs4

current_url = 'autoglassbodyrepair.lawshield.co.uk'
try:
   req = rq.get(current_url)
except rq.exceptions.RequestException as e:
   print(e)
else:
   soup = bs4.BeautifulSoup(r.content, "html.parser")
   text = soup.findAll(text = True)

Run Code Online (Sandbox Code Playgroud)

当我尝试浏览器时,它显示证书已过期,但我可以处理 https 被禁止并变成红色的页面。我想要的是,如果出现不允许我访问该页面的异常,我会忽略它并进入下一页进行处理,但如果没有异常,我会处理当前页面并忽略那些 SSl 证书。

在此先感谢您的帮助 !

python error-handling python-requests

1
推荐指数
1
解决办法
2万
查看次数

将 GitHub api 与 Python dict“解析 JSON 时出现问题”一起使用时出现问题

我正在尝试使用 GitHub api 来创建新文件。根据文档

这可以通过 PUT 请求来完成。

我正在使用 requests 包来发出请求。GitHub api 端点接受有效的 json 对象作为输入,即字符串位于双引号内。

我的数据具有以下格式 -

{
  'message': 'Updated learn.md',
  'content': 'ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=',
  'branch': 'master'
}
Run Code Online (Sandbox Code Playgroud)

由于我以 Python 字典的形式放置数据,因此它带有单引号,但 GitHub 不接受它,并给出“解析 JSON 时出现问题”的 400 响应,如下所示

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://developer.github.com/v3/repos/contents/#update-a-file"
}
Run Code Online (Sandbox Code Playgroud)

我已经验证问题是因为仅使用邮递员发出 PUT 请求时的引号,在这种情况下它是成功的。

正确的数据如下所示

{
  "message": "Updated learn.md",
  "content": "ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=",
  "branch": "master"
}
Run Code Online (Sandbox Code Playgroud)

这是我拨打电话的方式

def put_data_to_github(self, url, data):
    headers = {}
    headers['Authorization'] = "token " + self.auth_token
    response = requests.put(url, data=data, headers=headers)
    return response
Run Code Online (Sandbox Code Playgroud)

如何在 Python 中创建有效的 …

python json github-api python-3.x python-requests

1
推荐指数
1
解决办法
1223
查看次数

无法使用 slack api files.upload 上传文件

这个问题可能看起来重复,但我已经尝试了很多但没有成功。我正在尝试使用https://slack.com/api/files.upload API上传 html 文件,但总是遇到以下错误。响应 {'ok': False, 'error': 'no_file_data'}

我浏览了文档[链接] https://api.slack.com/methods/files.upload并尝试了不同的选项,但我仍然得到相同的响应 {'ok': False, 'error': 'no_file_data' }

我还在堆栈溢出中看到了许多类似的问题,但没有一个解决了问题。[链接]使用 Slack API 上传时出现 no_file_data 错误 [链接]如何使用 file.upload 和 requests 将文件上传到 slack

下面是我的代码。

import requests

def post_reports_to_slack(html_report):
    """
    """
    url = "https://slack.com/api/files.upload"

    # my_file = {html_report, open(html_report, 'rb'), 'html'}

    data = {
        "token": bot_user_token,
        "channels": channel_name,
        "file": html_report,
        "filetype": "html"
    }

    # data = "token=" + bot_user_token + \
    #        "&channels=" + channel_name +\
    #        "&file=" + html_report + "&filetype=" + …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-requests slack-api

1
推荐指数
1
解决办法
5771
查看次数

在Python中,我想使用HTTP而不是HTTPS进行其余请求,包似乎不同意

我尝试过使用请求:

url = 'http://bot'    # this is a local service
import requests

r = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

我得到

requests.exceptions.SSLError:HTTPSConnectionPool(主机='bot',端口=443)

我指定了 HTTP,而不是 HTTPS,但它尝试使用 SSL 进行连接。

所以,我尝试了httplib2:

url = 'http://bot'    # this is a local service
response, content = http.request(url, "GET")
Run Code Online (Sandbox Code Playgroud)

我得到:

ssl.SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:无法获取本地颁发者证书(_ssl.c:1076)

我不知道为什么有人对 HTTPS 如此痴迷,但我不想要它。它是一个正在开发中运行的本地服务,并且是纯 HTTP。在 url 中添加“:80”不会改变任何内容。

当使用CURL或C#访问同一个服务时,通过HTTP,没有问题。

我如何告诉 python 库我想要一个纯 HTTP 连接而不是其他?

python httplib2 python-requests

1
推荐指数
1
解决办法
3552
查看次数