我有一个向端点发出的请求,但由于某种原因,响应正文仅包含响应的最后一行(整个响应在 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) 如果 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 是否不是特定值?
我目前正在尝试从深度学习交易所收集数据。问题是我需要高分辨率(秒间隔)的数据,因此我为每种货币创建大量 GET 请求。但我确实很快就达到了 API 的极限。
我想知道是否有可能通过公共代理服务器路由 GET 请求,以声明拥有不同的 IP 地址,以便使用 Raspberry PI 发出尽可能多的请求。
我必须使用请求模块来获取大量 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 尝试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。
关于我可能做错了什么有什么建议吗?
我已经部署了一个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 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 证书。
在此先感谢您的帮助 !
我正在尝试使用 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 中创建有效的 …
这个问题可能看起来重复,但我已经尝试了很多但没有成功。我正在尝试使用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) 我尝试过使用请求:
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-requests ×10
python ×9
python-3.x ×3
amazon-ec2 ×1
django ×1
get ×1
github-api ×1
go ×1
http ×1
httplib2 ×1
https ×1
json ×1
networking ×1
post ×1
proxy ×1
python-2.7 ×1
slack-api ×1
socks ×1