相关疑难解决方法(0)

如何阻止cURL使用100继续?

所以,长话短说,我有一个使用MVC Web API作为后端的AJAX应用程序.然而,客户端从不同的域调用并使用PHP代理文件来解决跨域请求问题.

但是,使用PHP代理,Web API会使用100 ContinueHTTP标头响应某些请求,并且任何获取此请求的请求都需要花费过多的时间才能完成(我们说的最多2分钟左右)并且还可以返回无效的响应.

似乎是cURL的一个已知问题,解决方法通常被引用为插入以下行以删除cURL请求中的expect:100标头

不幸的是,解决方案对我来说似乎难以捉摸:

$headers = getallheaders();
$headers_new = "";
foreach($headers as $title => $body) {
    $headers_new[] = $title.": ".$body;
}
//$headers_new[] = 'Expect:';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_new);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:') );
Run Code Online (Sandbox Code Playgroud)

此代码有效,但删除了所有其他标头(这对我来说是不可行的,因为我使用HTTP基本身份验证头来通过API进行身份验证).您可能还会注意到我尝试将其添加Expect:到现有标头中,但这对我也没有帮助.

如何维护现有标头,还可以防止cURL期望100继续?

php proxy jquery curl

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

在多线程环境中使用libcurl会导致与DNS查找相关的非常慢的性能

你将不得不原谅相当大的代码块,但我相信这是对我的问题的近乎最小的再现.问题不是孤立的,example.com而是持续存在于许多其他网站上.

如果我有4个线程主动发出网络请求,curl工作100%罚款.

如果我再添加一个线程,该线程需要大约10倍的时间来执行.我觉得我必须错过一些明显的东西,但它现在逃脱了我.

更新更多信息:这些测试位于虚拟机中.与机器可用的内核数量无关,其中四个请求需要大约100毫秒,其余请求大约需要5500毫秒.

更新2:实际上,我在一个方面是错的,它并不总是4/ n-4分布 - 当我改为4核心时,有时我得到一个不同的结果分布(在1核上运行至少看起来相对一致) - 这里是一个当线程在4核VM上运行时返回其延迟(ms)而不是其http代码时的结果片段:

   191  191
   198  198  167
   209  208  202  208
   215  207  214  209  209
  5650  213 5649  222  193  207
   206  201  164  205  201  201  205
  5679 5678 5666 5678  216  173  205  175
  5691  212  179  206 5685 5688  211 5691 5680
  5681  199  210 5678 5663  213 5679  212 5666  428
Run Code Online (Sandbox Code Playgroud)

更新3:我从头开始构建curl和openssl,删除锁定(因为openssl 1.1.0g不需要它)并且问题仍然存在.(通过以下方式进行的完整性检查/验证):

std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading virtual-machine libcurl futex

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

为什么do_GET比do_POST快得多

Python的BaseHTTPRequestHandler对于通过邮寄发送的表单存在问题!

我见过其他人问同样的问题(为什么GET方法比POST更快?),但我的情况时差太大(1秒)

Python服务器:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import datetime


def get_ms_since_start(start=False):
    global start_ms
    cur_time = datetime.datetime.now()
    # I made sure to stay within hour boundaries while making requests
    ms = cur_time.minute*60000 + cur_time.second*1000 + int(cur_time.microsecond/1000)
    if start:
        start_ms = ms
        return 0
    else:
        return ms - start_ms

class MyServer(BaseHTTPRequestHandler, object):
    def do_GET(self):
        print "Start get method at %d ms" % get_ms_since_start(True)
        field_data = self.path
        self.send_response(200)
        self.end_headers()
        self.wfile.write(str(field_data))
        print "Sent response at %d ms" % get_ms_since_start()
        return

    def …
Run Code Online (Sandbox Code Playgroud)

post http basehttpserver httpserver basehttprequesthandler

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

如何在 libcurl 中禁用 Expect 100 continue

我正在使用 CURLOPT_POST 发送 https 消息。在运行过程中,我的应用程序卡在:

期望:100-继续

完成等待 100-继续

libcurl

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