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. 《Java程序猿面试笔试宝典》之组合与继承有什么差别

    组合和继承是面向对象中两种代码复用的方式. 组合是指在新类里面创建原有类的对象,反复利用已有类的功能.继承是面向对象的主要特性之中的一个,它同意设计人员依据其他类的实现来定义一个类的实现. 组合和继承 ...

  2. CentOS6.8设置开机直接进入命令行模式

    在linux图形界面中,按 “Alt+Ctrl+F1”,进入命令行界面. 切换到root用户 # vi /etc/inittab 找到下面的语句: # Default runlevel. The ru ...

  3. Upgrade site collection from SP2010 to SP2013(Part 2)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  4. c++primer记录(二) 模板

    因为看得源码里有大量的类模板,所以补充下C++中模板的知识 模板:函数模板 类模板 .p- 函数模板的类型参数可由编译器进行推断,也可以由用户显式的指定,类模板的类型参数必须显式的给出: p- 非类型 ...

  5. ORACLE expdp/impdp导出实例

    服务器上以sys或system超级管理员登录. SQL>create directory expdp_dir as '/home/oracle/dmpdata';(dmpdata 需要建立.赋予 ...

  6. MathType使用中的四个小技巧

    MathType是一种比较常见的数学公式编辑器,常常与office搭配着使用,我们在使用的时候有一些要注意的小技巧,下面我们就来给大家介绍介绍MathType使用中的四个小技巧? 技巧一:调整工具栏显 ...

  7. nginx配置语法

    http://baijiahao.baidu.com/s?id=1604485941272024493&wfr=spider&for=pc http://blog.csdn.net/h ...

  8. 超全面的JavaWeb笔记day13<JSTL&自定义标签>

    1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2 ...

  9. hadoop程序MapReduce之DataSort

    需求:对文件中的数据进行排序. 样本:sort.log 10 13 10 20 输出:1 10 2 10 3 13 4 20 分析部分: mapper分析: 1.<k1,v1>k1代表:行 ...

  10. #error和line

    #error message ----注:message不需要用双引号包围, #error 编译指示字用于自定义程序特有的编译错误消息类似的, #warning用于生成编译警告,但不会停止编译. 在l ...