标签:出现 llb name 必须 工作 expect important etop pen
HTTP协议提供了消息头,请求消息头用于告诉服务器如何处理请求;响应消息头则告诉浏览器如何处理接收到的数据。在libcurl中,你可以自由的添加 这些消息头:
struct curl_slist *headers=NULL; /*init to NULL is important*/ headers = curl_slist_append(headers,"Accept:*/*");
headers = curl_slist_append(headers,"Pragma:no-cache");
headers = curl_slist_append(headers,"Host:http 1.1");
curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER, headers);
curl_easy_perform(easyhandle);/*transfer http */
curl_slist_free_all(headers); /*free the header list*/
删除消息头
对于一个已经存在的消息头,设置它的内容为空,libcurl在发送请求时就不会同时提交该消息头:
headers = curl_slist_append(headers, "Accept:");
七、多线程问题
首先一个基本原则就是:绝对不应该在线程之间共享同一个libcurl handle(CURL *对象),不管是easy handle还是multi handle(本文只介绍easy_handle)。一个线程每次只能使用一个handle。
八、什么时候libcurl无法正常工作
传输失败总是有原因的。你可能错误的设置了一些libcurl的属性或者没有正确的理解某些属性的含义,或者是远程主机返回一些无法被正确解析的内容。
这里有一个黄金法则来处理这些问题:将CURLOPT_VERBOSE属性设置为1,libcurl会输出通信过程中的一些细节。如果使用的是http协 议,请求头/响应头也会被输出。将CURLOPT_HEADER设为1,这些头信息将出现在消息的内容中。
当然不可否认的是,libcurl还存在bug。
如果你对相关的协议了解越多,在使用libcurl时,就越不容易犯错。
九、关于密码
客户端向服务器发送请求时,许多协议都要求提供用户名与密码。libcurl提供了多种方式来设置它们。
一些协议支持在URL中直接指定用户名和密码,类似于: protocol://user:password@example.com/path/。libcurl能正确的识别这种URL中的用户名与密码并执行 相应的操作。如果你提供的用户名和密码中有特殊字符,首先应该对其进行URL编码。
也可以通过CURLOPT_USERPWD属性来设置用户名与密码。参数是格式如 “user:password ”的字符串:
curl_easy_setopt(easy_handle, CURLOPT_USERPWD, "user_name:password");
有时候在访问代理服务器的时候,可能时时要求提供用户名和密码进行用户身份验证。这种情况下,libcurl提供了另 一个属性CURLOPT_PROXYUSERPWD:
curl_easy_setopt(easy_handle, CURLOPT_PROXYUSERPWD, "user_name:password");
在UNIX平台下,访问FTP的用户名和密码可能会被保存在$HOME/.netrc文件中。libcurl支持直接从这个文件中获取用户名与密码:
curl_easy_setopt(easy_handle, CURLOPT_NETRC, 1L);
在使用SSL时,可能需要提供一个私钥用于数据安全传输,通过CURLOPT_KEYPASSWD来设置私钥:
curl_easy_setopt(easy_handle, CURLOPT_KEYPASSWD, "keypassword");
十、HTTP验证
在使用HTTP协议时,客户端有很多种方式向服务器提供验证信息。默认的 HTTP验证方法是"Basic”,它将用户名与密码以明文的方式、经Base64编码后保存在HTTP请求头中,发往服务器。当然这不太安全。
当前版本的libcurl支持的验证方法有:basic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO。(译者感叹:搞Web这么多年,尽然不知道这些Http的验证方式,实在惭愧。)可以通过CURLOPT_HTTPAUTH属性来设置具体 的验证方式:
curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
向代理服务器发送验证信息时,可以通过CURLOPT_PROXYAUTH设置验证方式:
curl_easy_setopt(easy_handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
也可以同时设置多种验证方式(通过按位与), 使用‘CURLAUTH_ANY‘将允许libcurl可以选择任何它所支持的验证方式。通过CURLOPT_HTTPAUTH或 CURLOPT_PROXYAUTH属性设置的多种验证方式,libcurl会在运行时选择一种它认为是最好的方式与服务器通信:
curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC);
//curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
标签:出现 llb name 必须 工作 expect important etop pen
原文地址:https://www.cnblogs.com/zhangnianyong/p/11759810.html