小编Dan*_*erg的帖子

如何在C中使用curl获取响应值

在 C 中使用curl 执行http post 后,我​​在获取响应值时遇到困难。

我收到如下回复:

POST /xxxx HTTP/1.1
Host: xxxx.net
Accept: */*
Content-Length: 271
Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)

HTTP/1.1 200 OK
Content-Type: text/xml
Date: Tue, 18 Nov 2014 13:49:31 GMT
Server: Null
Content-Length: 106
Connection: keep-alive

<?xml version="1.0" encoding="UTF-8"?>
<rsp stat="fail">
<err code="100" msg="Invalid_Parameter"/>
</rsp>
Run Code Online (Sandbox Code Playgroud)

如何使用curl获取xml响应值?

我使用curl_easy_perform 来处理http post。

我看过帮助文档,但只能找到CURLINFO_HTTP_CODE和CURLINFO_CONTENT_TYPE。但它与 xml 响应值无关。我应该使用什么样的curl_easy_getinfo参数?

c curl libcurl

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

我可以在没有ALPN支持的情况下实现http/2服务器吗?

这样,客户端可以在没有ALPN的情况下连接服务器并使用http/2默认值.

那可能吗?

http2 http2-lawyers

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

使用 CURL 通过 SFTP 删除文件

我想使用 curl 删除文件

我正在使用 SFTP,下面是我正在使用的代码。它不适合我

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_URL, "sftp://use:@101.101.101.101/");
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
    curl_setopt($ch, CURLOPT_PORT, 51402);
    curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE, '/home/web/.ssh/id_rsa');
    curl_setopt($ch, CURLOPT_SSH_PUBLIC_KEYFILE, '/home/web/.ssh/id_rsa.pub');
    curl_setopt($ch, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PUBLICKEY);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_QUOTE, array("DELE /dispatch/confirm/W00027478.csv"));
    $result = curl_exec($ch);
    $error_no = curl_errno($ch);
    curl_close($ch);

    if ($error_no == 0) {
        echo "Delete File $filename<br>";
    } else {
        echo "File Not Delete $filename<br>";
    }
Run Code Online (Sandbox Code Playgroud)

php sftp curl delete-file

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

libcurl:连接保持活动如何工作?

如何保持与 libcurl 的连接?

我想要的用法如下。Keep-Alive我想连接到支持但在 90 秒不活动后关闭连接的服务器。当某些事件(在此连接之外)发生时,我想POST偶尔执行一次,并且我想保持连接处于活动状态以减少延迟。可能会发生超过 90 秒没有事件发生的情况,所以我想要一种方法来告诉服务器我没有空闲。

示例页面非常好,但我没有看到涉及Keep-Alive: https: //curl.haxx.se/libcurl/c/example.html

我确实找到了CURLOPT_TCP_KEEPINTVL: https: //curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPINTVL.html,但我不清楚它应该如何工作。在该示例中,我们看到代码:

CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

  /* enable TCP keep-alive for this transfer */
  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);

  /* set keep-alive idle time to 120 seconds */
  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);

  /* interval time between keep-alive probes: 60 seconds */
  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);

  curl_easy_perform(curl);
}
Run Code Online (Sandbox Code Playgroud)

描述如下:

过了很长。设置操作系统在发送保活探测之​​间等待的时间间隔(以秒为单位)。并非所有操作系统都支持此选项。(7.25.0 中添加)

两个问题:

A) 在操作上,我该如何使用它?从描述来看,只要我保持curl在范围内,连接就会保持打开状态。它是否正确?然后我应该继续做吗

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis); …
Run Code Online (Sandbox Code Playgroud)

c http libcurl

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

哪个HTTP库更好?Wget,cUrl,LibWWW还是......?

哪个库更适合HTTP?Wget,cUrl,LibWWW还是别的什么?

我想要一个可移植的C/C++库.

谢谢

curl wget libcurl

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

获取指向类方法的指针,以便可以将其作为回调传递给C函数

我正在使用libssh2并在我的SSHWrapper对象之外定义了一个回调函数:

static void kbd_callback(const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract);
Run Code Online (Sandbox Code Playgroud)

在我的SSHWrapper对象中,我执行以下操作,在验证会话时传递回调函数:

/* Create a session instance */
LIBSSH2_SESSION *session = libssh2_session_init_ex(NULL, NULL, NULL, self);
while ((rc = libssh2_userauth_keyboard_interactive(session, userChar, &kbd_callback)) == LIBSSH2_ERROR_EAGAIN);
Run Code Online (Sandbox Code Playgroud)

我想知道的是,是否可以kbd_callback()在我的对象中移动函数,以便它是一个类方法:+(void) kbd_callback:...

如果是这样,我如何获取该函数的地址以将其传递给C函数libssh2_userauth_keyboard_interactive()

c function-pointers objective-c libssh2

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

与HTTP/1.1相比,HTTP/2如何提供更快的浏览速度?

我正在阅读一篇关于启动HTTP/2 的文章.据说HTTP/2基于SPDY(快速)协议,与HTTP/1.1相比,它可以通过使用"头字段压缩"和"多路复用"提供更快的浏览速度.这些术语如何正常工作?

我是否应该相信在HTTP/1.1请求中以"一个接一个"的方式处理?

http httprequest http-headers multiplexing http2

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

如何获取和比较libcurl版本?

我正在使用libcurl设置OAuth 2.0访问令牌。从libcurl 7.33 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token);选项开始。现在,我需要获取libcurl版本并将其与7.33进行比较。如果版本为7.33或更高版本,我将使用CURLOPT_XOAUTH2_BEARER,否则我将做其他事情。我知道我应该以某种方式使用,curl_version_info_data *curl_version_info( CURLversion type );但我不知道struct中的数据是什么样子以及如何将它们与7.33版本进行比较。有人能帮我吗?

c version libcurl

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

在 curl 命令中为文件名添加时间戳

使用 curl 命令从远程服务器下载文件后,我希望在文件名中添加时间戳或仅添加日期。我知道你可以使用 -o 来指定你想要命名的文件。我看到过这样的建议: -o "somefile $(date +\"%H:%M\").txt" 来尝试实现这一点,但我无法让它正常工作,它只是将文件保存为 'somefile $(date' 就像它不将 $ 识别为变量一样。

有没有人知道使用 curl 或是否可能实现此目的的方法?

有没有另一种方法来创建一个带有日期的变量,然后将其附加到文件名上?

提前致谢。

curl sh

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

为什么现代的curl版本会截断URL的#anchor部分?

我观察到不同卷曲版本之间的奇怪行为。

如果我使用带有7.19.7的curl的CentOS 6 curl 'localhost:9999/foo#bar'(在9999上侦听),我得到:

GET /foo#bar HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost:9999
Accept: */*
Run Code Online (Sandbox Code Playgroud)

但是如果我在带有curl 7.38.0的现代系统(Debian 8)上进行相同的卷曲,则会得到:

GET /foo HTTP/1.1
User-Agent: curl/7.38.0
Host: localhost:9999
Accept: */*
Run Code Online (Sandbox Code Playgroud)

请注意,URL不同:(7.19.7)/foo#bar/foo(7.38.0)

我了解正确的行为是删除了该#anchor部件,因为这是curl工具的较新版本。但是,我不知道发生此更改的原因...请问有关此原因的任何提示或对此的引用(例如RFC)?

我试图在curl更新日志中找到信息,但是它太冗长,而且我还没有找到它背后的更改和/或原理。

url curl http libcurl

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