你说的调用http服务,是指的用js去发送http请求是吧。
在前端,你可以用jquery的Get和Post方法分别发起对远程主机的Get和Post请求,这两个请求都是Http请求的。
如果你使用node.js 也可以用http.createRequest() 函数对指定远程主句发送http请求。
如何使用javascript获取网页(jsp)上的文字内容?
1、简单的jsoup爬取
String url="a.atimo.cn";//静态页面链接地址
Document doc = Jsoup.connect(url).userAgent("Mozilla").timeout(4000).get();
if(doc!=null){
Elements es = doc.select("div.comments>ul>li");//
System.out.println(es);
if(es!=null && es.size()>0){
for (Element element : es) {
String link = element.select("div>h3").attr("href");
String title = element.select("div>h3").text();
String author = element.select("div.c-abstract>em").text();
String content = element.select("dd>a>div.icos>i:eq(1)").text();
}
}
}
通过jsop解析返回Document 使用标签选择器,选择页面标签中的值,即可获取页面内容。
2.延时加载,有些网站存在延时加载,表格内容,或者嵌入页面形式的加载的页面
//构造一个webClient 模拟Chrome 浏览器
String url = "https://www.cnblogs.com/atimo/";
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//支持JavaScript
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setTimeout(3000000);
HtmlPage rootPage = webClient.getPage(url);
String html = rootPage.asXml();
Document document = Jsoup.parse(html);
Elements es = document.select("div.comments");//.select("#content_left");
System.out.println(es);
if(es!=null && es.size()>0){
for (Element element : es) {
String link = element.select("div.f13>a").attr("href");
String title = element.select("div>h3>a").text();
String text = element.select("div.c-abstract>em").text();
}
}
获取到的是Document 使用标签选择器,选择页面标签中的值,即可获取页面内容。
3.获取评论或其他内容,返回json数据;js请求
普通请求,只需要使用
HttpURLConnection connection = createRequest(url, "GET");
// 建立实际的连接 connection.connect();
发送GET请求过去json数据后解析即可;
4.js请求带请求头参数(部分为移动端请求)
CloseableHttpClient https = HttpClients.createDefault();
String url = "https://action=hene=124&devicetype=androidlag=zh_CN&nettyene=3&pass_ticwx_header=1";
HttpGet httpPost = new HttpGet(url);
httpPost.addHeader("Host", "
mp.weixin.qq.com
");
httpPost.addHeader("x-wechat-uin", wechartCookie.getUin());
httpPost.addHeader("x-", "参数");
HttpResponse response = https.execute(httpPost);
HttpEntity entitySort = response.getEntity();
String html = EntityUtils.toString(entitySort, "utf-8");
请求头参数根据抓包工具拦截的请求时需要的参数变更;
"
python如何通过 request 模块发送post请求?
发送post请求,最主要的还是抓包分析,获取到post提交的参数,然后利用python构建参数字典,模拟发送请求,下面我简单介绍一下过程,实验环境win10+python3.6+pycharm5.0+谷歌浏览器,主要内容如下:
1.这里以模拟登陆我们的校园网为例,界面如下,需要输入用户名、密码:
接着按F12调出开发者工具,在当前页面输入用户名和密码,点击登陆,抓包分析,如下,可以看到登陆的页面url:
往下翻,就可以看到页面在post提交时,传递的参数,如下:
2.针对以上分析结果,我们就可以构建对应的代码了,如下,一个是post参数,一个是headers(模拟浏览器),这里建议用Session,会自动处理cookies,代码如下:
接着我们就可以试着爬取一些页面,这里以爬取考试成绩为例,如下,利用BeautifulSoup解析一下页面,然后提取信息,打印出来,在上面代码的基础下再添加如下代码:
程序运行截图如下,已经成功抓取到我们需要的数据:
至此,我们就完成了利用python来模拟发送post请求。总的来说,整个过程不难,最主要的还是抓包分析,获取post参数,这里的页面比较简单,参数不多,好处理,但在一些比较大的网站中,post参数比较多,而且还有不少是经过加密处理的,或者有验证码,这个就需要自己认真的分析,研究对应的对策了。