此问题发生在 Windows 10 上(我知道这一点,因为 Mac 操作系统上不存在)。
每当您向端点之一发出如下所示的简单请求时,在 Windows 上速度非常慢,而在 Mac OS 上几乎是即时的。
import requests
requests.get('/user/get/' + str(current_user.id))
Run Code Online (Sandbox Code Playgroud)
在 Windows 上大约需要 3 秒,而在 Mac OS 上几乎是瞬时的。
通过使用一些简单的日志记录,我发现urllib3(这是请求的底层库)在建立新的 http 连接时需要很长时间。这是目前的痛点,我不知道如何解决这个问题。
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:5004
Run Code Online (Sandbox Code Playgroud)
修复失败1:
我从这个答案中尝试了以下内容,但它不起作用。
import requests
session = requests.Session()
session.trust_env = False
r = session.get('/user/get/' + str(current_user.id))
Run Code Online (Sandbox Code Playgroud)
我也从相同的答案中尝试了以下内容,但它不起作用。
os.environ['NO_PROXY'] = 'localhost'
Run Code Online (Sandbox Code Playgroud)
修复失败2:
我尝试了第二个假设的修复,但它也不起作用。
import requests
proxies = {
"http": None,
"https": None,
}
r = requests.get('/user/get/' + str(current_user.id), proxies=proxies)
Run Code Online (Sandbox Code Playgroud)
现在..
这让我没有答案,也没有可用的修复方法。有人知道为什么这是一个问题吗?
我正在编写一个 Amazon API,当仅使用 Python 请求而不使用代理时,它会提示输入验证码。当通过 fiddler 路由这个 python 请求流量时,它似乎没有问题地通过。亚马逊是否有可能对 Python 请求进行指纹识别,而 fiddler 由于它是代理而更改了指纹?
我查看了从 fiddler 和 Python 请求发送的标头,它们是相同的。
在 fiddler 上没有设置额外的代理/fiddler 规则/过滤器来创建更改。
需要明确的是,所有提到的代理仅在本地完成,因此不会更改公共 IP 地址。
我已经在 python 2.7 中安装了 requests 模块,但是在导入它时给了我
import-im6.q16: not authorized `requests' @ error/constitute.c/WriteImage/1037
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我正在尝试将以下 cULR 命令转换为 Python:
curl --location --request POST 'api.datamyne.com/frontend/REST/application' \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "boKnofR06mzldz5eL00ARwa3B9winzpn",
"idApp":44
}'
Run Code Online (Sandbox Code Playgroud)
我有以下 Python 代码,但似乎不起作用。知道如何将原始数据包含到请求中吗?
import requests
headers = {
'Content-Type': 'application/json',
'token': 'boKnofR06mzldz5eL00ARwa3B9winzpn',
'idApp': '44'
}
response = requests.get('http://api.datamyne.com/frontend/REST/applications', headers=headers)
print(response.content)
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用Python从http请求头获取客户端的IP地址?我正在做一个天气项目,如果我能显示他自己所在位置的天气信息那就太好了。
python http request-headers python-requests python-requests-html
我最近一直在尝试在网络浏览器中通过 python 运行命令,就像使用 chrome 开发人员工具一样。
这在 chrome 中很容易做到,但是我该如何在 python 中做到这一点呢?我不知道如何从 python 脚本中复制它。我想要运行的浏览器命令特定于我正在使用的网站,这就是我需要使用命令行的原因。
如何在 python 3 中重新在浏览器命令行中运行命令?抱歉,如果这是一个愚蠢的问题。谢谢!
编辑:我最终使用了硒,但遇到了一些问题。我正在访问的网站( roblox.com )在浏览器控制台中显示我未经授权。
不过,当我登录时,我非常确定我正确实施了身份验证 cookie。由于某种原因,我的一些数据没有加载,例如我的货币计数。
这可能不是问这样的问题的地方,因为该论坛的成员对 roblox 一无所知,但也许这是我的代码中的一个简单问题。
# my code
from selenium import webdriver
import time
driver = webdriver.Chrome('C:\\Users\KDJ\Documents\GameJoiner\chromedriver.exe')
options = webdriver.ChromeOptions()
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
URL = 'https://www.roblox.com/games'
driver.get(URL)
driver.add_cookie({'name' : '.ROBLOSECURITY', 'value' : Cookie})
driver.get(URL)
Run Code Online (Sandbox Code Playgroud)
附带说明一下,您可能看不到我定义 Cookie 变量。这是因为我删除了它,因为这个 cookie 允许其他人登录我的帐户。
当发送带有身份验证的请求时,我收到 requests.exceptions.SSLError 错误,您可以在下面看到。
proxies = { 'https' : "http://user:pass@ip:port/" }
url = "https://httpbin.org/ip"
numberResponse = requests.get(url,proxies=proxies).text
print(numberResponse)
Run Code Online (Sandbox Code Playgroud)
requests.exceptions.SSLError
Traceback (most recent call last):
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 696, in urlopen
self._prepare_proxy(conn)
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 964, in _prepare_proxy
conn.connect()
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 359, in connect
conn = self._connect_tls_proxy(hostname, conn)
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 496, in _connect_tls_proxy
return ssl_wrap_socket(
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\ssl_.py", line 428, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\ssl_.py", line 472, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\Users\K_Yuk\AppData\Local\Programs\Python\Python38\lib\ssl.py", line 500, in wrap_socket …Run Code Online (Sandbox Code Playgroud) 我的目标是让人们理解requests.get()我想用作#查询符号而不是默认符号?。
这是一个例子:
import requests
# our base url
url = 'https://www.example.com/search#'
# our query parameters
params = {
'one_parameter' : 'one_value'
}
# making the request
response = requests.get(url, params = params)
# printing the url requested by requests.get()
print(response.url)
Run Code Online (Sandbox Code Playgroud)
我期待这个输出:
https://www.example.com/search#one_parameter=one_value
Run Code Online (Sandbox Code Playgroud)
相反,我得到:
https://www.example.com/search?one_parameter=one_value
Run Code Online (Sandbox Code Playgroud)
两个问题:
#?#而不是 a?作为查询分隔符的请求?更新:
当 url 变得很长时,我想从 LinkedIn 搜索中提取数据,它会切换到 a#而不是?.
网址示例:(
https://www.linkedin.com/sales/search/people#companyExcluded=Clarins%3A10116%2CEverlog%3A10473838%2CSisley%2520Paris%3A1055530%2CBMW%2520BAYERN%2520Bordeaux-Bassin%2520by%2520autosphere%2520(M%25C3%25A9rignac%2520-%2520La%2520Teste-de-Buch)%3A10667996%2COrange%3A1110%2CShiseido%3A11223%2Cmercedes%3A11235632%2CA26%2520architectures%3A11380777...以及更多)
是的,确实看起来有些 JavaScript 正在使用片段部分来进行进一步的处理并最终获取数据。
因此我需要模仿浏览器的行为。
我正在编写一个带有字节体的 python post 请求:
with open('srt_file.srt', 'rb') as f:
data = f.read()
res = requests.post(url='http://localhost:8000/api/parse/srt',
data=data,
headers={'Content-Type': 'application/octet-stream'})
Run Code Online (Sandbox Code Playgroud)
在服务器部分,我尝试解析正文:
app = FastAPI()
BaseConfig.arbitrary_types_allowed = True
class Data(BaseModel):
data: bytes
@app.post("/api/parse/{format}", response_model=CaptionJson)
async def parse_input(format: str, data: Data) -> CaptionJson:
...
Run Code Online (Sandbox Code Playgroud)
但是,我收到了 422 错误:
{"detail":[{"loc":["body"],"msg":"value is not a valid dict","type":"type_error.dict"}]}
那么我的代码哪里出了问题,我应该如何修复它?预先感谢大家的帮助!
我一直在尝试使用https://www.dickssportinggoods.com/f/tents-accessories 请求模块访问该网站,但它只是继续处理并且不会停止,而同一网站在浏览器上运行良好。Scrappy 给出了同一网站的超时错误。访问此类网站时有什么需要注意的吗?谢谢
python ×10
python-requests ×10
api ×1
captcha ×1
curl ×1
fastapi ×1
fiddler ×1
http ×1
proxy ×1
python-2.7 ×1
python-3.x ×1
ssl ×1
web-scraping ×1