pycurl 中的 HTTP2 发布请求

问题描述

我正在尝试访问位于 alb 后面的 Nginx 服务器。我正在使用 pycurl 触发一个简单的 HTTP2 POST 请求。我的请求看起来像这样'

import io
import pycurl
curl = pycurl.Curl()
curl.setopt(curl.URL,"https://alb-xxxx.us-east-1.elb.amazonaws.com/endpoint")
curl.setopt(pycurl.HTTP_VERSION,pycurl.CURL_HTTP_VERSION_2_PRIOR_KNowLEDGE)
curl.setopt(pycurl.POST,1)
curl.setopt(pycurl.VERBOSE,1)
curl.setopt(pycurl.SSL_VERIFYPEER,0)
curl.setopt(pycurl.SSL_VERIFYHOST,0)

with io.BytesIO() as buf:
    curl.setopt(curl.WRITEFUNCTION,buf.write)
    curl.perform()
    print(buf.getvalue())
    curl.close()

我得到的错误

error                                     Traceback (most recent call last)
<ipython-input-91-0756005b6c1b> in <module>()
     16 with io.BytesIO() as buf:
     17     curl.setopt(curl.WRITEFUNCTION,buf.write)
---> 18     curl.perform()
     19     print(buf.getvalue())
     20     curl.close()

error: (92,'HTTP/2 stream 1 was not closed cleanly: INTERNAL_ERROR (err 2)')

错误的发生是随机的。有时我得到正确的回应,有时我得到这样的错误。但是当我尝试在 curl 中做同样的事情时,我总是得到正确的响应。这是我的 curl 命令。

curl -v -k --http2-prior-kNowledge -X POST https://alb-xxx.us-east-1.elb.amazonaws.com/endpoint

我的帖子请求响应是一个字符串({"field":"value"})。我的 Nginx 配置文件是这样的

        location =/endpoint {
        if ($request_method = POST) {
        return 200 '{"field":"value"}';
}
}

我不知道为什么我在 curl 中得到了正确的响应,但在 pycurl 中得到了不同的响应。我在 pycurl 中做错了什么吗?

Pycurl 版本 -> 7.43.0.6 Python 版本 -> 3.8.5

谢谢。任何帮助表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)