C#爬虫入门之简单POST请求-有道翻译

析构棱镜
• 阅读 3386

简要说明

HTTP请求头(Headers)

user-agent:
伪装浏览器,应对网站反爬虫措施
Referer:
告诉服务器该网页是从哪个页面链接过来的
Content-Type:
告诉网站发送请求的媒体类型

POST请求字符串格式:

"{0}={1}&{2}={3}&{4}={5}..."
eg:"query=他改变了&i=1926&t=蛤"

构建请求字符串

/// <summary>
/// 把字典转化为请求字符串
/// </summary>
/// <param name="dict">参数字典</param>
/// <returns>返回请求字符串</returns>
public static string GetPostArgs(Dictionary<string,string> dict)
{
    StringBuilder sb = new StringBuilder();
    bool first = true;
    foreach (var item in dict)
    {
        if(first)
        {
            sb.Append(item.Key);
            sb.Append("=");
            sb.Append(item.Value);
            first = false;
        }
        else
        {
            sb.Append("&");
            sb.Append(item.Key);
            sb.Append("=");
            sb.Append(item.Value);
        }
    }
    return sb.ToString();
}

创建POST请求发送表单并接受返回信息

/// <summary>
/// 发送Post请求
/// </summary>
/// <param name="url">连接</param>
/// <param name="headers">HTTP头</param>
/// <param name="str">请求字符串</param>
/// <returns>返回结果</returns>
public static string PostInf(string url, WebHeaderCollection headers, string str)
{
    //创建HTTP请求
    var re = WebRequest.Create(url) as HttpWebRequest;
    //设置请求头
    re.Headers = headers;
    //设置访问类型为POST
    re.Method = "POST";
    //写入请求信息
    using(StreamWriter sw=new StreamWriter(re.GetRequestStream()))
    {
        sw.WriteLine(str);
    }
    //获取相应内容
    var ans = re.GetResponse();
    using (var st = new StreamReader(ans.GetResponseStream()))
    {
        return st.ReadToEnd();
    }
}

Main方法

var url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule";
var headers = new WebHeaderCollection();
headers["Content-Type"] ="application/x-www-form-urlencoded";
headers["user-agent"]="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
headers["Referer"]="https://www.lagou.com/jobs/list_unity3d?labelWords=&fromSearch=true&suginput=";
var dict = new Dictionary<string, string>()
{
    {"i",ReadLine() },
    {"from","AUTO" },
    {"to","AUTO" },
    {"smartresult","dict" },
    {"client", "fanyideskweb" },
    {"salt","15808837717114" },
    {"sign","22a6ee9a07d4821f04e50bd029f73de0" },
    {"ts" ,"1580883771711" },
    {"bv","38c3ccbde2d50a86f0f9606d2be5a3d8"},
    {"doctype","json" },
    {"version","2.1"},
    {"keyfrom","fanyi.web"},
    {"action","FY_BY_REALTlME" }
};
var str=PostInf(url,headers, GetPostArgs(dict));

处理JSON字符串

注:本次使用DNC自带的json解析工具

using (var dt = JsonDocument.Parse(str))
{
   WriteLine(dt.RootElement.GetProperty("translateResult")[0][0].GetProperty("tgt"));
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Json格式Java封装天猫商品详情数据接口,实现海量商品采集业务
根据天猫的API文档,获取天猫商品详情的API是通过发送Http/Post/GET请求,其中itemID是具体的商品ID。以下是Python和Java封装获取天猫商品详情API(复制Taobaoapi2014)的示例代码:1.请求方式:HTTPPOSTGE
智多星V+TNY264278 智多星V+TNY264278
9个月前
采集数据的时候,碰到反爬虫程序怎么办?
当碰到反爬虫程序时,可以尝试以下几种方法来应对:一、调整访问频率降低请求速度:大多数反爬虫机制是基于访问频率来判断是否为爬虫的。如果采集数据时请求发送得过于频繁,很容易被目标网站识别出来。例如,原本你每秒发送10个请求,现在将其降低到每秒12个请求,使其更
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
析构棱镜
析构棱镜
Lv1
每天下班5分钟做一下今天的整理工作。
文章
3
粉丝
0
获赞
0