服务器API不响应Curl函数

时间:2019-04-06 10:16:10

标签: php c++ curl apache2

附录

我在我的服务器上有一个服务API,可以通过213.209.253.6:7209访问。 我需要通过3rd(Aruba)托管的服务器上的网站(php)和我的内部网络通过c ++程序联系API。

ENV

情况1(开发中)

网站仍处于开发阶段,因此在本地主机上运行xampp并通过外部ip或内部网络ip请求API,可以正常工作,并且c ++代码也没有问题。通过浏览器和curl控制台的请求曾经有效;

情况2(生产)

该网站与第3方服务器上的域一起运行。对于混合内容(https中的网站和http中的API)的请求失败是非常合理的。为了解决这个问题,我修改了服务器API的httpd.conf文件,加载了ssl_moudle,配置了证书.key,.crt和ca-bundle并在7210上侦听安全请求。

情况3(产生SSL)

API响应良好(安全连接和不安全连接):浏览器,curl控制台,实时网站的javascript(ajax)代码,网站的php和javascript代码**(仅来自本地主机)** API无法通过curl php代码和本地网络中运行的程序中的curl c ++代码响应实时生产网站;

输出

对于php “不响应”表示直到连接自身自行关闭或超时关闭该请求之前,该请求一直未得到响应,没有任何数据交换来自curl_getinfo()或curl_error()的其他信息(也在VERBOSE模式下)。 API服务器上没有apache日志。 对于C ++ 同样在这里,“不响应”表示直到连接关闭之前请求一直未得到响应,但是apache使用以下命令记录该请求:

(access_log)

192.168.1.113 - - [06/Apr/2019:11:40:33 +0200] "GET HTTP://192.168.1.130:7209/ HTTP/1.1" 400 226

(错误日志)

[Sat Apr 06 11:01:23.937408 2019] [core:debug] [pid 12567:tid 3000998720] vhost.c(1169): [client 192.168.1.113:59008] AH02417: Replacing host header '192.168.1.130:7209' with host '192.168.1.130:7209' given in the request uri
[Sat Apr 06 11:01:23.937915 2019] [authz_core:debug] [pid 12567:tid 3000998720] mod_authz_core.c(820): [client 192.168.1.113:59008] AH01626: authorization result of Require all granted: granted
[Sat Apr 06 11:01:23.937936 2019] [authz_core:debug] [pid 12567:tid 3000998720] mod_authz_core.c(820): [client 192.168.1.113:59008] AH01626: authorization result of <RequireAny>: granted
[Sat Apr 06 11:01:44.196715 2019] [reqtimeout:info] [pid 12567:tid 3000998720] [client 192.168.1.113:59008] AH01382: Request body read timeout

SNIPPET

两天以来我一直在为此苦苦挣扎...

这里只有c ++的代码,而php代码的语法几乎相同,但结果相同...

if (curl) {
    string st_url = "";
    const char *url= st_url.c_str();
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_POST, 1L);
    string st_postfields = "mystuff";
    const char *postfields= st_postfields.c_str();
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postfields);
    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
    //curl_easy_setopt(curl, CURLOPT_PORT, 7209);
    //curl_easy_setopt(curl, CURLOPT_PROXY, "192.168.1.130:7209");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

    res = curl_easy_perform(curl);

我评论了我在网上发现的内容,但没有结果。

情况4(无SSL-实际)

我认为真正的问题在于服务器API的修改配置,因此我不使用ssl_module进行回滚,而我的httpd.conf文件是:

Listen 7209
ServerName 127.0.0.1:7209
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

结果从情况3更改为情况4

1 个答案:

答案 0 :(得分:0)

具有讽刺意味的是,毕竟问题很简单:托管我网站的第三方阻止了非标准端口上的请求。我只是询问(并等待了2天)技术支持。对于所有人的知识,Aruba仅在以下情况下支持传出请求:

  • FTP 21
  • HTTP 80
  • HTTPS 443
  • POP3 110、995
  • SMTP 465、587
  • IMAP 143、993