gpt4 book ai didi

python - WinError 10049 : The requested address is not valid in its context

转载 作者:行者123 更新时间:2023-11-28 19:55:43 44 4
gpt4 key购买 nike

我正在尝试在 Python 中发出原始 HTTP 请求并将响应写入文件。当我尝试绑定(bind)到已解析的 IP 地址或主机域时,我得到了这个:

Traceback (most recent call last):

File "thingy.py", line 3, in <module>

soc.bind(('168.62.48.183', 80))

OSError: [WinError 10049] The requested address is not valid in its context

我找到了一个 StackOverflow question有相同的错误,但它没有回答我的问题,因为它是用于监听 套接字的。这是我的代码:

from socket import *
soc = socket(AF_INET, SOCK_STREAM)
soc.bind(('168.62.48.183', 80))
soc.send('GET /miners/get?file=BFGMiner-3.99-r.1-win32.zip HTTP/1.1\nUser-Agent:MultiMiner/V3\nHost: www.multiminerapp.com\n')
response = soc.recv()
respfile = open("http-response.txt","w")
respfile.writelines(response)
respfile.close()

最佳答案

from socket import *
soc = socket(AF_INET, SOCK_STREAM)
soc.connect(('168.62.48.183', 80))
soc.send('GET /miners/get?file=BFGMiner-3.99-r.1-win32.zip HTTP/1.1\nUser-Agent:MultiMiner/V3\nHost: www.multiminerapp.com\n')
with open("http-response.txt","w") as respfile:
response = soc.recv(1024) # <--- Use select.epoll or asyncore instead!
respfile.writelines(response)

您的代码失败的原因是您试图绑定(bind)到外部 IP。
您的机器不知道此 IP,因此出现错误消息,如果您将其更改为 127.0.0.1 它会起作用,但您又需要一个 .listen(4) ns, na = soc.accept() 在 utelizing .send() 和你的 soc.recv() 之前需要为 ns.recv(1024)

换句话说,您混淆了客户端套接字和服务器套接字,并且您绑定(bind)到本地计算机上不存在的 IP。

另请注意:soc.recv() 会失败,您需要像这样的缓冲区大小参数:soc.recv(1024)

Python3:

from socket import *
soc = socket(AF_INET, SOCK_STREAM)
soc.connect(('168.62.48.183', 80))
soc.send(b'GET /miners/get?file=BFGMiner-3.99-r.1-win32.zip HTTP/1.1\nUser-Agent:MultiMiner/V3\nHost: www.multiminerapp.com\n\n') # Note the double \n\n at the end.
with open("http-response.txt","wb") as respfile:
response = soc.recv(8192)
respfile.write(response)

有两个主要区别,我们发送二进制 GET/miners/.. 字符串而不是标准字符串。其次,我们以二进制形式打开输出文件,因为接收到的数据也将是二进制形式。

这是因为由于多种原因,Python 不再为您解码字符串,因此您需要将数据视为二进制数据或在此过程中手动解码。

你可能应该:

import urllib.request
f = urllib.request.urlopen("http://www.multiminerapp.com/miners/get?file=BFGMiner-3.99-r.1-win32.zip")
print(f.read())

关于python - WinError 10049 : The requested address is not valid in its context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857942/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com