标签: http.client

Python3 中的 http.client.IncompleteRead 错误

我正在尝试使用 beautifulsoup4 和 python3 抓取一个非常长的网页。由于网站的大小,http.client当我尝试在网站中搜索某些内容时,会出现错误:

文件“/anaconda3/lib/python3.6/http/client.py”,第 456 行,在读取返回 self._readall_chunked() 文件“/anaconda3/lib/python3.6/http/client.py”,第 570 行,在 _readall_chunked 中引发 IncompleteRead(b''.join(value)) http.client.IncompleteRead: IncompleteRead(16109 字节读取)

有什么办法可以解决这个错误吗?

python beautifulsoup python-3.x http.client

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

解压缩 (Gzip) 来自 http.client 调用的响应块

我有以下代码,用于尝试将来自 http.client.HTTPSConnection get 请求的响应分块到 API(请注意,响应是gzip 编码的

    connection = http.client.HTTPSConnection(api, context = ssl._create_unverified_context())
    connection.request('GET', api_url, headers = auth)
    response = connection.getresponse()
    while chunk := response.read(20):
        data = gzip.decompress(chunk)
        data = json.loads(chunk)
        print(data)
Run Code Online (Sandbox Code Playgroud)

这总是给出一个错误,它是not a gzipped file (b'\xe5\x9d')。不知道如何对数据进行分块并仍然实现我在这里尝试做的事情。基本上,我进行了分块,这样我就不必将整个响应加载到内存中。请注意,我不能使用任何其他库,如 requests、urllib 等。

python gzip http.client

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

如何使用python的http.client准确读取一个响应块?

使用http.client在Python 3.3+(或任何其他内置的Python HTTP客户端库),我怎么可以一次读取分块的HTTP响应正好一个HTTP块?

我正在扩展服务器的现有测试装置(使用python编写http.client),该服务器使用HTTP的分块传输编码来编写其响应。为了简单起见,假设我希望能够在客户端收到HTTP块时打印一条消息。

我的代码遵循相当标准的模式来读取较大的响应:

conn = http.client.HTTPConnection(...)
conn.request(...)
response = conn.getresponse()

resbody = []

while True:
    chunk = response.read(1024)
    if len(chunk):
        resbody.append(chunk)
    else:
        break

conn.close();
Run Code Online (Sandbox Code Playgroud)

但这将读取1024字节的块,无论服务器是否发送10字节的块或10MiB的块。

我正在寻找的东西将如下所示:

while True:
    chunk = response.readchunk()
    if len(chunk):
        resbody.append(chunk)
    else
        break
Run Code Online (Sandbox Code Playgroud)

如果无法使用http.client,则可以使用另一个内置的http客户端库吗?如果内置客户端库无法实现,可pip安装模块是否可以实现?

python http python-3.x http.client

3
推荐指数
2
解决办法
4578
查看次数

在使用 python 和 http.client 的 post 请求中包含证书的示例

我正在尝试使用 python 将 xml 发布到站点。我必须包含证书,但不确定如何执行此操作。在我的计算机上本地指定证书的文件路径是否足够?

任何人都可以向我展示如何在请求中包含证书的示例吗?

import http.client, urllib.parse

xml="""<?xml version="1.0" encoding="UTF-8"?>
<home>
  <bathroom>1</bathroom>
  <kitchen>1</kitchen>
  <street>515</street>
</home>);"""

headers = {"username": "password"}

conn = http.client.HTTPSConnection("someurl.com", cert_file="D:\Users\Username\certificate.p12")
conn.request("POST", "/to/this/place", xml, headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data)
conn.close()
Run Code Online (Sandbox Code Playgroud)

python https post certificate http.client

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

request.context 不会关闭连接

我正在使用 context.Context 取消 http 请求

我发现虽然我得到了“上下文取消”,但底层套接字连接仍然可用,几秒钟后我可以得到响应。是否以这种方式设计来在请求发出后读取响应?

这是代码

func SendRequest(ctx context.Context, url string) {
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        fmt.Println(err)
    }
    req = req.WithContext(ctx)

    res, err := client.Do(req)
    select {
    case <-ctx.Done():
        fmt.Printf("%s Canceled\n", url)
        //client.Transport.(*http.Transport).CancelRequest(req)
        //client.Transport.(*http.Transport).CloseIdleConnections()
    }
    if res != nil {
        defer res.Body.Close()
    }
    if err != nil {
        fmt.Printf("Failed: %v\n", err)
    } else {
        io.Copy(ioutil.Discard, res.Body)
        fmt.Printf("return status: %d\n", url, res.StatusCode)
    }
}
Run Code Online (Sandbox Code Playgroud)

我请求的 URL 将在几秒钟后返回,因此我仍然可以读取响应正文,并且在进程退出后连接已关闭。

这是重现问题的简单代码

func client() {
    ctx, cancel …
Run Code Online (Sandbox Code Playgroud)

go http.client

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

带有http.client的“无效内存地址...”的图源

我正在学习并在这个恐慌错误中挣扎......它工作了一段时间,但很快就出现了这样的异常 panic: runtime error: invalid memory address or nil pointer dereference

该函数简单地遍历代理映射,直到它成功获得“地址”的内容。一定不是很惯用,尤其是用map代替slice和last return,但我希望这不是panic Crush的原因......如果我遗漏了一些可能重要的东西,请告诉我,我会更新帖子,我只是不想用不必要的信息淹没它。proxies 是一个带有 map 字段的结构体,具有并发安全读取/删除的方法。

func getContent(address string) string {
localProxies := proxies.Get()
for proxy := range localProxies {
    proxyUrl, _ := url.Parse("http://" + proxy)

    transport := http.Transport{
        Dial:  dialTimeout,
        Proxy: http.ProxyURL(proxyUrl),
    }
    httpClient := http.Client{Transport: &transport, Timeout: timeout}
    req, err := http.NewRequest("GET", address, nil)
    if err != nil {
        fmt.Println("Request error: ", err.Error())
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0")
    res, err := httpClient.Do(req) …
Run Code Online (Sandbox Code Playgroud)

go http.client

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

使用 api 和 http.client 解析 imdb 电影数据库

我正在尝试从以下网站检索 JSON 数据:www.themoviedb.org 我只能使用 http.client 和 json 作为库。我有一个有效的 API 密钥,但我不想在这个问题中透露。

url = "https://api.themoviedb.org/3/movie/550?api_key=xxxx"
conn = http.client.HTTPConnection(url,port=80)
## things work well until i call request
conn.request("GET","/")
Run Code Online (Sandbox Code Playgroud)

错误

for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno 11001] getaddrinfo 失败

python http.client

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

类型错误:无法在 HTTPSConnection 中将 str 连接到字节

我正在尝试提出授权请求并提出TypeError: can't concat str to bytes. 我在网上搜索并发现了类似的问题,但没有一个可以帮助解决我的问题。我目前正在 Jupyter 工作(如果有帮助的话?)而且我是一个 python 菜鸟,所以请温柔一些......

这是我的代码:

import http.client as httplib
import urllib.request, urllib.parse, urllib.error, base64
import requests as rq

base_url = 'api/url'
end_point = '/endpoint'
full_url = base_url + end_point

request_body = {
    'UserName':'un',
    'Password':'pw'
}

header = {
    'tenant': 'tenant name'  #required by vendor
}

print(type(base_url))
print(type(end_point))
print(type(full_url))
print(type(request_body))
print(type(header))

try:
    conn = httplib.HTTPSConnection(base_url)
    conn.request(method='POST',url=full_url, body=request_body, headers=header)
    response = conn.getresponse()
    data = response.read()
    print(type(data))
    print(data)
    conn.close()
except Exception as e:
    print("[Errno …
Run Code Online (Sandbox Code Playgroud)

python http.client

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

标签 统计

http.client ×8

python ×6

go ×2

python-3.x ×2

beautifulsoup ×1

certificate ×1

gzip ×1

http ×1

https ×1

post ×1