标签: chunked

如何使用带有“传输编码:分块”的 winhttp api

我正在尝试将一些数据发送到需要“传输编码:分块”标头的 Web 服务。它适用于普通的 POST 请求。但是一旦我添加标题,我总是得到:

由于以下情况,无法传送内容:收到来自客户端的无效请求

这是发送请求的部分:

std::vector<std::wstring> m_headers;
m_headers.push_back(TEXT("Transfer-encoding: chunked"));
std::wstring m_verb(TEXT("POST"));
std::vector<unsigned __int8> m_payload;

HINTERNET m_connectionHandle = WinHttpConnect(m_http->getSessionHandle(), hostName.c_str(), m_urlParts.nPort, 0);
if (!m_connectionHandle) {
    std::cout << "InternetConnect failed: " << GetLastError() << std::endl;
    return;
}

__int32 requestFlags = WINHTTP_FLAG_SECURE | WINHTTP_FLAG_REFRESH;
HINTERNET m_requestHandle = WinHttpOpenRequest(m_connectionHandle, m_verb.c_str(), (path + extra).c_str(), NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, requestFlags);
if(!m_requestHandle) {
    std::cout << "HttpOpenRequest failed: " << GetLastError() << std::endl;
    return;
}

for(auto header : m_headers) {
    if(!WinHttpAddRequestHeaders(m_requestHandle, (header + TEXT("\r\n")).c_str(), -1, WINHTTP_ADDREQ_FLAG_ADD)) { …
Run Code Online (Sandbox Code Playgroud)

c++ winhttp chunked transfer-encoding

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

使用Winsock接收分块的HTTP数据

我在使用winsock读取一些分块的HTTP响应数据时遇到了麻烦.我发送请求很好并获得以下回复:

HTTP/1.1 200 OK
Server: LMAX/1.0
Content-Type: text/xml; charset=utf-8
Transfer-Encoding: chunked
Date: Mon, 29 Aug 2011 16:22:19 GMT
Run Code Online (Sandbox Code Playgroud)

使用winsock recv.在这一点上,它只是挂起.我让听众在一个无限循环中运行,但没有任何东西被拾起.

我认为这是一个C++问题,但它也可能与我通过stunnel推送连接以将其包装在HTTPS中的事实有关.我有一个测试应用程序使用C#中的一些库,它通过stunnel完美地工作.我很困惑为什么我的循环在初始recv之后没有收到C++分块数据.

这是有问题的循环...它是在上面的chunked ok响应之后调用的...

while(true)
{
    recvBuf= (char*)calloc(DEFAULT_BUFLEN, sizeof(char)); 
    iRes = recv(ConnectSocket, recvBuf, DEFAULT_BUFLEN, 0);
    cout << WSAGetLastError() << endl;
    cout << "Recv: " << recvBuf << endl;
    if (iRes==SOCKET_ERROR)
    {
        cout << recvBuf << endl;
        err = WSAGetLastError();
        wprintf(L"WSARecv failed with error: %d\n", err);
        break;
    }     

}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c++ http-get winsock chunked stunnel

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

HTTP:非法分块编码

我有一个 .NET 客户端应用程序,它使用第三方库通过 http 访问服务器。该库抛出以下错误:

The server committed a protocol violation. Section=ResponseBody Detail=Response chunk format is invalid
Run Code Online (Sandbox Code Playgroud)

该软件已经安装了数十次,所以我认为这一定是客户系统中的问题,我怀疑是之间的代理。

我已经使用 Fiddler 来获得第一个提示。在嗅探 Fiddler 时注意到违反协议:

Illegal chunked encoding. 'MIME-Version: 1.0' is not a hexadecimal number.
Run Code Online (Sandbox Code Playgroud)

Fiddler 显示以下响应:

MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye; type=text/xml

--MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <osci@message>
Content-Length: 1545

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ soapMessageEncrypted.xsd http://www.w3.org/2000/09/xmldsig# oscisig.xsd http://www.w3.org/2001/04/xmlenc# oscienc.xsd"><soap:Body><xenc:EncryptedData MimeType="Multipart/Related"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"></xenc:EncryptionMethod><ds:KeyInfo><xenc:EncryptedKey><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"></xenc:EncryptionMethod><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIID0jCCArqgAwIBAgIJAMg6MGbE+zZRMA0GCSqGSIb3DQEBDQUAMIGJMQswCQYDVQQGEwJERTEf
MB0GA1UECAwWTWVja2xlbmJ1cmctVm9ycG9tbWVybjERMA8GA1UEBwwIU2Nod2VyaW4xLDAqBgNV
BAoMI0NvbXB1dGVyLUJlcm
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,响应意外停止。

有谁知道问题可能是什么或如何解决?

mime protocols http http-1.1 chunked

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

ChunkedInput不适用于球衣

任何人都可以帮助我为什么java代码有问题并一次打印所有数据而不是将每个块作为javascript代码打印

Java代码:

import org.glassfish.jersey.client.ChunkedInput;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;

public class RunClient {

    public static void main(String args[]) throws InterruptedException {
        Client client = ClientBuilder.newClient();
//2 is to increase amount of data and 3(seconds) is for time b/w chunked output  ,can be changed
        final Response response = client.target("http://jerseyexample-ravikant.rhcloud.com/rest/jws/streaming/2/3").request()
                .get();
        final ChunkedInput<String> chunkedInput = response.readEntity(new GenericType<ChunkedInput<String>>() {
        });
        String chunk;
        while ((chunk = chunkedInput.read()) != null) {
            System.err.println("Next chunk received: " );
            System.out.println(chunk);
        }


    }
}
Run Code Online (Sandbox Code Playgroud)

JavaScript :(打开页面 …

java rest jersey chunked

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

如何将URLSessionStreamTask与URLSession一起用于分块编码传输

我正在尝试连接到Twitter流API端点.它看起来像URLSession支持流式传输URLSessionStreamTask,但我无法弄清楚如何使用API​​.我也找不到任何示例代码.

我尝试测试以下内容,但没有记录网络流量:

let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
let stream = session.streamTask(withHostName: "https://stream.twitter.com/1.1/statuses/sample.json", port: 22)
stream.startSecureConnection()
stream.readData(ofMinLength: 0, maxLength: 100000, timeout: 60, completionHandler: { (data, bool, error) in
   print("bool = \(bool)")
   print("error = \(String(describing: error))")
})
stream.resume()
Run Code Online (Sandbox Code Playgroud)

我也实现了委托方法(包括URLSessionStreamDelegate),但它们没有被调用.

如果某个代码发布了如何为chunked来自流端点的响应打开持久连接的示例,那将非常有用.此外,我正在寻求不涉及第三方库的解决方案.类似于/sf/answers/663165121/但使用URLSession等效更新的响应将是理想的.

注意:上面的示例代码中省略了授权信息.

network-programming chunked ios nsurlsession swift

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

带有改造 2 的流媒体服务器 - 分块

我应该从返回带有 Transfer-Encoding: chunked 的 json 的服务器流式传输一个端点。

我有以下代码,但我无法读取响应。我尝试了 responseBody.streamBytes() 并将输入流转换为 String 但我无法在主线程中执行此操作。我怎么能阅读回复?

@Streaming
@GET("stream/status")
Observable<ResponseBody> streamStatus();

Observable<ResponseBody> observable = ApiClientHelper.getClient().streamStatus();
    observable
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<ResponseBody>() {
                @Override
                public void onSubscribe(Disposable d) {
                }

                @Override
                public void onNext(final ResponseBody responseBody) {
                   //DON'T KNOW HOW TO READ DATA
                }

                @Override
                public void onError(Throwable e) {
                }

                @Override
                public void onComplete() {
                }
            });
Run Code Online (Sandbox Code Playgroud)

编辑:

使用 CURL 的服务器响应:

@Streaming
@GET("stream/status")
Observable<ResponseBody> streamStatus();

Observable<ResponseBody> observable = ApiClientHelper.getClient().streamStatus();
    observable
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<ResponseBody>() {
                @Override
                public …
Run Code Online (Sandbox Code Playgroud)

android chunked retrofit2

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

如果未发送HTTP标头,如何从分块编码确定内容数据长度

如果未发送Transfer-Encoding: chunked标头而是您收到标头,如何确定内容数据长度?

http chunked content-length

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

如何强制http.client在python中发送chunked-encoding HTTP正文?

我想发送分块的HTTP主体来测试我自己的HTTP服务器.所以我写了这个python代码:

import http.client

body = 'Hello World!' * 80

conn = http.client.HTTPConnection("some.domain.com")
url = "/some_path?arg=true_arg"

conn.request("POST", url, body, {"Transfer-Encoding":"chunked"})

resp = conn.getresponse()
print(resp.status, resp.reason)
Run Code Online (Sandbox Code Playgroud)

我希望HTTP请求的主体是transferrd chunked,但我使用Wireshark捕获网络包,HTTP请求的主体不会被转移.

如何通过python中的http.client lib传递分块体?

python http chunked

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

如何删除Transfer-Encoding:在HTTP响应中分块

我创建了一个HTTP端点(Java中的REST,Spring Framework,Apache Tomcat),其中HTTP响应的标题为"Transfer-Encoding:chunked".我不知道它是由servlet还是服务器创建的.

我不希望端点响应该标头.是否可以强制它以便不发送标题?

rest servlets http chunked transfer-encoding

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

RESTful API - 批量操作的分块响应

我正在研究类似REST的API,它将支持某些资源上的批量操作.由于完成此类请求可能需要一些时间,因此我希望在分块响应中返回操作的状态.媒体类型应为JSON.如何使用JAX-RS?

(我知道有StreamingOutput,但它需要手动序列化数据.)

java rest json jax-rs chunked

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