zoukankan      html  css  js  c++  java
  • [译]Customizing Operations

    Customizing Operations
    定制操作

    There is an ongoing development today where more and more protocols are built upon HTTP for transport. This has obvious benefits as HTTP is a tested and reliable protocol that is widely deployed and has excellent proxy-support.

    When you use one of these protocols, and even when doing other kinds of programming you may need to change the traditional HTTP (or FTP or...) manners. You may need to change words, headers or various data.

    libcurl is your friend here too.

    CUSTOMREQUEST

    If just changing the actual HTTP request keyword is what you want, like when GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there for you. It is very simple to use:
    如果只是想改变Http method,例如 GET HEAD POST,可以使用CURLOPT_CUSTOMREQUEST:

    curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST");

    When using the custom request, you change the request keyword of the actual request you are performing. Thus, by default you make a GET request but you can also make a POST operation (as described before) and then replace the POST keyword if you want to. You're the boss.


    Modify Headers
    修改headers

    HTTP-like protocols pass a series of headers to the server when doing the request, and you're free to pass any amount of extra headers that you think fit. Adding headers is this easy:
    如下代码添加http header:

    struct curl_slist *headers=NULL; /* init to NULL is important */

    headers = curl_slist_append(headers, "Hey-server-hey: how are you?");
    headers = curl_slist_append(headers, "X-silly-content: yes");

    /* pass our list of custom made headers */
    curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);

    curl_easy_perform(easyhandle); /* transfer http */
    curl_slist_free_all(headers); /* free the header list */

    ... and if you think some of the internally generated headers, such as Accept: or Host: don't contain the data you want them to contain, you can replace them by simply setting them too:
    也可以用上面的方式替换原有的header为你想要的值:

    headers = curl_slist_append(headers, "Accept: Agent-007");
    headers = curl_slist_append(headers, "Host: munged.host.line");

    Delete Headers
    删除Header

    If you replace an existing header with one with no contents, you will prevent the header from being sent. For instance, if you want to completely prevent the "Accept:" header from being sent, you can disable it with code similar to this:
    如果不想发送某个Header,可以设置对应header内容为空,如下:
    headers = curl_slist_append(headers, "Accept:");

    Both replacing and canceling internal headers should be done with careful consideration and you should be aware that you may violate the HTTP protocol when doing so.
    无论是替换还是取消一个内部header的时候,请三思而后行。

    Enforcing chunked transfer-encoding
    块传输

    By making sure a request uses the custom header "Transfer-Encoding: chunked" when doing a non-GET HTTP operation, libcurl will switch over to "chunked" upload, even though the size of the data to upload might be known. By default, libcurl usually switches over to chunked upload automatically if the upload data size is unknown.
    当使用非GET方式的HTTP操作时,设置了"Transfer-Encoding: chunked"Header,
    libcurl会切换为"chunked"模式的上传,即使上传的数据大小是位置。
    默认情况下,libcurl总是会自动使用"chunked"模式上传。


    HTTP Version

    All HTTP requests includes the version number to tell the server which version we support. libcurl speaks HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests and when dealing with stubborn old things like that, you can tell libcurl to use 1.0 instead by doing something like this:
    所有http请求都包含有Http的版本,用户告诉服务器所支持的Http版本。
    libcurl默认使用http 1.1
    对于一些不支持http 1.1的老服务器,可以在libcurl中使用http 1.0;

    curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

  • 相关阅读:
    Saltstack
    搭建中小规模集群之rsync数据同步备份
    Python开发【第七篇】:面向对象二
    批量管理
    inotify
    Python开发【第六篇】:面向对象
    网络文件系统NFS
    Linux基础介绍【第九篇】
    Linux基础介绍【第八篇】
    Linux基础介绍【第七篇】
  • 原文地址:https://www.cnblogs.com/solohac/p/4311286.html
Copyright © 2011-2022 走看看