1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known"

解决方法:添加host(ip url,网址对应的ip);

2.curl提交数据给服务器的时候,出现了提交文本text,不是'key=val&key=val'这种形式的,而是带换行的那种字符串,这是就不能使用http_build_query函数

解决方法:

  a.使用php中的定界符<<<,然后在定界符中间写需要传输的字符串,该换行就换行;

  b.在传输字符串的时候一定要注意字符串的单双引号,字符串是单引号括住的有时候传输之后会报错,得不到预期的数据,这时候就改成双引号即可;

3.在采集数据的过程中,有时候提交的数据中的某个参数你在页面上始终找不到的时候该怎么办?

解决办法:特殊参数值可能保存在cookie、js或者需要重新请求一个新的url获得参数的值

4.ip被指定网站屏蔽了怎么办?

解决方法:linux的curl中有个-x的选项,设置匿名代理的ip和端口即可 curl -x 192.168.0.1:8080 http://www.baidu.com.

5.当使用linux的curl模拟登陆某个网站时,提示登陆成功了,但是当你去获取比如用户的详细信息时,怎么都获取不到?返回的页面信息提示你去登陆,这是怎么回事呢???

说明:今天遇到按要求抓取一个很简单的网站,但是就在模拟登陆成功后准备做其他操作的时候,返回的信息一直就是提示要你去登陆,你未登陆,真心是很奇怪...

猜想与解决:

  1.你在登陆成功后要获取某个页面的时候,必须要把过程页面也都获取一遍(说明:过程页面?比如登陆成功后跳转到A页面,这时候你要获取用户的基本信息,你需要点击用户中心这个按钮进入用户的个人中心B页面,然后进入B页面后它会触发ajax请求用户的数据这里请求的url我们称为C,那么有些网站很厉害了,你如果登陆成功后,直接curl去请求C页面,是获取不到任何信息的,相反会提示一堆的错误或者别的情况的信息);

  解决:根据步骤先获取A页面数据;再请求B页面的数据;最后再获取C也就是用户数据

  2.cookie内缺少参数:我今天碰到的就是这个问题,cookie内本来是“PHPSESSID=5b5b92d8d664629a83b3adb1e1e1a393; CheckCode=1237”这些内容,而我模拟登陆后的cookie文件内只有“CheckCode=1237”,缺少了PHPSESSID参数,造成就算你提交数据登陆返回了登陆成功,你也获取不到具体的数据;

  解决:

    a.查找所有与该网站有关的js和登陆页面相关的html文件,是否存在代码生成该参数,或者有些网站每次请求都把该参数写到固定的js文件内,需要curl获取该js文件然后匹配出来,拼接到cookie中;

    b.在上一步没有找到的时候,这时候你要是要抓包工具抓取在从进入登陆页面到登陆完成以及进入数据页面的这个过程中请求的所有的页面,在这些请求内找到cookie内的PHPSESSID参数是从哪个url请求的时候开始有这个参数的(比如:进入登陆页面a,a的请求header等信息内cookie内没有设置该参数,那么就找下一个url,比如是获取验证码url,看看是否设置了,一直这么找 ....,直到找到从哪个url开始cookie设置了该参数,那么只需要curl请求一次该url即可,注意请求该url的位置)

    c.第三种情况最特殊,有些网站它的登陆入口有好几个,一般的会有两个,一个直接在首页有一个登陆的地方,一个就是单独的登陆页面,而且从这两个登陆的入口点击登陆成功后跳转的页面可能有所不同,在浏览器上操作两个入口登陆都能获取对应的内容,但是当我们使用curl进行模拟登陆获取数据的时候就会出现意想不到的事情,那就是当你从首页这个入口登陆进去,获取用户的数据,可以登陆成功,但是在进入数据页面获取对应数据的时候怎么都获取不到,很是郁闷,我之前遇到该问题,苦恼了很长时间,想不出来试哪里出了问题;后来我仔细一想,我换一个入口进入数据页面也许就可行,结果果然可以(就好比是数据页面是目标页面C,那么从首页登陆进来跳转到了B页面,从B页面直接进入C页面的话获取数据死活获取不到;当你从登陆页登陆跳转到D页面,D页面再进入C页面,这个时候就能获取成功,这就是目标一样,但是在到达目标之前有一个岔路口e和f,只有一条路可以走到目标)

    d.经过上几步还是无法获取成功,那么可能就需要咱们在使用curl请求的时候手动拼接cookie缺失的参数了,形式如下:

--cookie 'phoneflag=0; loanaccnum=""; gjjaccnum='xxxx'; gjjaccname='xxx'; gjjcertinum=xxxxxxx'

    有些cookie中的数据需要你去请求特定的url,然后获取到之后拼接成cookie即可(手动拼接)

php curl采集数据问题汇总的更多相关文章

  1. php中CURL实现模拟登录并采集数据

    在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...

  2. [PHP自动化-进阶]001.CURL模拟登录并采集数据

    引言:PHP可以通过libcurl实现模拟登录,提交数据,违法乱纪,烧杀抢虐等等事项. 简单说明一下"libcurl",补一下脑: libcurl目前支持http.https.ft ...

  3. 服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana

    服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana https://www.cnblogs.com/xishuai/p/elk- ...

  4. php curl 采集

    curl 采集五个步骤: 1.curl_init()初始化curl 2.curl_setopt()设置传输数据和参数 3.curl_exec()执行传输并获取返回数据 4.curl_errono()返 ...

  5. curl采集 根据关键词 获取雅虎竞价排名

    之前写过curl批处理采集数据,这里贴上完整版本,代码很简单,废话不说,上代码,新手欢迎指教!!! 代码只写到 获取到链接了,至于排名 后边数组的键不就是排名喽... <?php /** * B ...

  6. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  7. NodeJs+Request+Cheerio 采集数据

    目的:采集网站文章. 两个依赖项: request :https://github.com/request/request cheerio:https://github.com/cheeriojs/c ...

  8. curl提交数据时中文乱码

    1.使用curl提交数据时中文乱码解决: <?php $testJSON=array('name'=>'中文字符串','value'=>'test'); foreach ( $tes ...

  9. AspxGridView 数据的汇总统计

    AspxGridView底部增加数据汇总行 这个功能在AspxGridView中不用复杂的代码实现, 实际上只是设置下GridView的属性而已 1. ShowFooter设置为True,即显示. 位 ...

随机推荐

  1. 真想用c#开发个 wp五笔输入法。。。奈何网上资料太少,源码都是c++写的。求大神指点!!!

    真想用c#开发个 wp五笔输入法...奈何网上资料太少,源码都是c++写的.求大神指点!!!!

  2. 【Java面试题】13 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    1.什么是匿名内部类? 内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类. 2.为什么需要匿名内部类? 每个inner class都能够各自继承某一实现类(implemen ...

  3. 学习使用资源文件[11] - DLL 中的资源文件

      本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: ...

  4. 存储过程不返回记录集导致ADO程序出错

    HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...

  5. linux系统中,查看当前系统中,都在监听哪些端口

    需求描述: 查看当前系统中都监听着哪些的端口,用netstat命令,在此记录下 操作过程: 1.查看系统中都在监听哪些端口 [root@testvm home]# netstat -ntl Activ ...

  6. TCP处理主要开销

    快速的网络TCP 通常受限 发送主机 与 接收主机. 而不是网络设备或协议本身的实现. TCP的处理的主要开销 分为中断操作.数据复制和协议处理. 1:中断操作 2:数据复制 3:协议处理 TCP的处 ...

  7. ios开发之--iOS 11适配:iOS11导航栏返回偏移

    UIBarButtonItem 左边间隙过大,解决方案(ios11之前): 调用下面的方法,设置negativeSpacer.width = -15;就可以解决间隙过大的问题: UIBarButton ...

  8. docker学习-docker镜像

    docker就是一系列文件,

  9. Intel S5000VSA(SAS)主板设置RAID 步骤【转】

    Intel S5000VSA(SAS)主板设置RAID 步骤 我近日亲自安 装了一台服务器,用的是intel S5000VSA 4DIMM主板,因为在安装过程中没有注意到一些细节,所以在安装时碰到了一 ...

  10. iOS开发 - 检测网络状态(WIFI、2G/3G/4G)

    本文转载至 http://blog.csdn.net/wangzi11322/article/details/45580917 检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 ...