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++ vector init操作

    1) string str[n]={"hello", ...}; vector<string> strArray(str,str+n); 2) vector<st ...

  2. VNC轻松连接远程Linux桌面(1)

    Linux平台安装VNCServer Windows平台使用VNC-Viewer 方法/步骤     在Linux平台安装VNCServer服务端软件包. #yum -y install vnc *v ...

  3. MVC生成图片验证码,可指定位数

    前台: <h2>mvc后台生成验证码,可指定位数</h2> <img id="gc" src="GetValidateCode" ...

  4. Spring-bean的作用域

    在大多数情况下,单例bean是很理想的方案.初始化和垃圾回收对象实例所带来的的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理.在这种情况下,将clas ...

  5. redis配置密码认证,通过密码可以进行连接

    需求说明: 今天配置了一台redis服务器,想要也和其他的数据库一样配置用户名/密码的方式进行登录. 查找了一下,没看到配置用户名的地方,就是有认证密码,所以就做了测试,在此进行记录. 操作过程: 1 ...

  6. c++虚函数表 Brew VTBL

    参考:http://blog.csdn.net/haoel/article/details/1948051/ BREW VTBL:http://blog.chinaunix.net/uid-51740 ...

  7. python2.7中关于编码,json格式的中文输出显示

    当我们用requests请求一个返回json的接口时候, 语法是 result=requests.post(url,data).content print type(result),result 得到 ...

  8. C#获取CPU处理器核心数量的方法_C#教程

    https://yq.aliyun.com/ziliao/89096 摘要: 本文讲的是C#获取CPU处理器核心数量的方法_C#教程, 有几条不同的处理器信息,您可以获得有关的信息:物理处理器数量.核 ...

  9. Maven------电脑安装Maven

    转载: http://blog.csdn.net/jiuqiyuliang/article/details/45390313 注意:修改本地仓库路径时,<localRepository>D ...

  10. X-code 描述文件的位置

    不管是真机测试还是打包的过程中,都需要描述文件.在桌面上,按快捷键“commd+Shift+G”,就会显示一个要填的文件路径,如下图: 找到描述文件的路径: ~/Library/MobileDevic ...