zoukankan      html  css  js  c++  java
  • 关于libcurl模拟提交form

    因为本人对web机制了解较少,在使用C/libcurl中遇到了很多问题。主要的解决方式:

    1,在网页源码中找到提交form的定位。也就是网页文件对应form中的action属性。往往都是提交到jsp或者php等脚本中运行的,而不是直接提交到本网页。

    2,要注意http头http头的不同会引起网页的不同反应。我做的一个小项目,在提交到两个网址php脚本时,都因为http头引起php脚本执行不正确。

    3,重定向问题。

      在一些网页中,返回的网页数据会带有重定向信息,这时要打开curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);

      以我目前掌握的,这个参数会自动跟踪http头中的重定向。这里之所以要打开,是因为重定向有一个超时参数,如果未能链接,

      也会导致网页执行出现问题。

    4,关于https,在编译libcurl的时候要加入openssl的支持。

    5,在代码中加入curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);可以追踪数据的传输状态。

    6,如果还是解决不了,使用Fiddler抓包。相比wireshark,Fiddler抓取https的包更加方便和快捷。

    7,不要太懒,在接收字节流的时候用string之类的容器。老老实实用char *或者byte *。

    最后再强调一下第六条:Fiddler可以更方便地抓https,通过比对包的不同可以轻松解决碰到的各种问题。

    如果您抓包之后还是无法正常获取数据的话,最后的解决方案是:

    curl_easy_setopt(m_curl, CURLOPT_TCP_KEEPALIVE, 1L);

    我在post一个网站的时候出现了这个问题,一样的包浏览器能获取到结果而libcurl不能。猜想深层次原因的话,应该是没有回复keeplive包导致的服务器认为连接已断开导致不会向本地发送数据。但网站的后台代码与服务器配置已经不能知晓了....

  • 相关阅读:
    python网络编程--RabbitMQ
    python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO
    python网络编程-SelectPollEpoll异步IO
    python网络编程--事件驱动模型
    python网络编程-协程(协程说明,greenlet,gevent)
    python网络编程--进程池
    python网络编程-进程锁
    python网络编程-进程间数据通信(Queue,Pipe ,managers)
    html之ul标签
    html之label标签
  • 原文地址:https://www.cnblogs.com/xiaoBay/p/7504276.html
Copyright © 2011-2022 走看看