一、常用Http操作

1.Get请求,有参数,无参数

2.Post 请求,有参数,无参数

3.文件简单下载

修改NetHelper中Post请求方法Bug:请求编码默认UTF8,字符串内存流读取后这是到开始位置。

        /// <summary>
/// Post 请求,无参(注:默认使用UTF8编码)
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
ms.Write(bytes, , bytes.Length);
ms.Seek(, SeekOrigin.Begin);//设置指针读取位置,否则发送无效
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, hc);
return await resp.Content.ReadAsStringAsync();
}
}

以前代码:

    /// <summary>
/// http协议请求方法封装
/// </summary>
public class NetHelper
{
#region Get请求
/// <summary>
/// get请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url)
{
HttpClient client = new HttpClient();
HttpResponseMessage resp = await client.GetAsync(url);
//获取响应状态
//respMsg.StatusCode==200请求成功
//获取请求内容
HttpContent respContent = resp.Content;
return await respContent.ReadAsStringAsync();
}
/// <summary>
/// Get 请求,指定参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return await GetAsync(builder.ToString());
} /// <summary>
/// get 请求 -同步处理
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
Task<string> result = GetAsync(url);
result.Wait();
return result.Result;
}
/// <summary>
/// Get请求-同步处理
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="dic">请求参数</param>
/// <returns></returns>
public static string Get(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return Get(builder.ToString());
}
#endregion #region Post 请求处理
/// <summary>
/// Post 请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.Unicode.GetBytes(content);
ms.Write(bytes, , bytes.Length);
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, null);
return await resp.Content.ReadAsStringAsync();
}
}
/// <summary>
/// Post 请求,处理参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, Dictionary<string, string> dic)
{
HttpClient client = new HttpClient();
FormUrlEncodedContent data = new FormUrlEncodedContent(dic);
var r = await client.PostAsync(url, data);
return await r.Content.ReadAsStringAsync();
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8));
//hc.Headers.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
//hc.Headers.Add("Timeout", timeOut.ToString());
//hc.Headers.Add("KeepAlive", "true");
} /// <summary>
/// Post请求,同步,无参
/// </summary>
/// <param name="url"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string Post(string url, string content = "")
{
Task<string> str = PostAsync(url, content);
str.Wait();
return str.Result;
}
/// <summary>
/// Post 请求,同步,参数处理
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> dic)
{
Task<string> str = PostAsync(url, dic);
str.Wait();
return str.Result;
}
#endregion #region 下载文件处理
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">链接地址</param>
/// <param name="target">存储地址</param>
/// <returns></returns>
public static bool DownLoad(string url, string target)
{
try
{
HttpClient client = new HttpClient();
var t = client.GetByteArrayAsync(url);
t.Wait(); var bytes = t.Result;
using (FileStream fs = new FileStream(target, FileMode.Create))
{
fs.Write(bytes, , bytes.Length);
fs.Close();
}
return true;
}
catch (Exception ex)
{
throw new Exception("下载文件失败,", ex);
}
}
#endregion
}

更多:

.Net Standard 类库的创建和使用

.Net Standard Http请求实例

.Net Standard简介

.Net Standard HttpClient封装Htt请求常用操作整理的更多相关文章

  1. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  2. vim程序编辑器---常用操作整理

    vim程序编辑器---常用操作整理 移动光标方法 o 在光标行的下一行,进入编辑模式 $ 移动到光标这行,最末尾的地方 G(大写) 移动到文件最末行 :set  nu 文件显示行数 :set  non ...

  3. vim编辑器——常用操作整理

    注意:以下的操作都是在命令状态下进行的,不要进入插入状态了.参考这里 1.删除 dd       删除一行 ndd    删除以当前行开始的n行dw    删除以当前字符开始的一个字符ndw   删除 ...

  4. Mysql数据库常用操作整理

    0.说明 MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle,MySQL更拥有轻便.灵活.开发速度快的特色,更适用于中小型数据的存储与架构,被数以万计的网站采用.从 ...

  5. vim用户手册笔记常用操作整理

    "x"命令可以删除一个字符 "d"命令可以后跟任何一个位移命令,它将删除从当前光标起到位移的终点处的文本内容dw "c",改变命令例如cw ...

  6. vim常用操作整理

    一.删除操作 :%s/r//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%s/^(.*)n1/1$/ 删除重复行 :%s/^.pdf/new.pdf/ 只是删除第一个pdf :% ...

  7. MongoDB常用操作整理

    Mongodb:是一种NoSQL数据库,NoSQL:Not Only SQLSQL: 数据表->JDBC读取->POJO(VO.PO)->控制层转化为JSON数据->客户端 这 ...

  8. PphpStorm常用操作整理

    本地修改记录:在项目名称上右键,点击Local History | Show History.你可以看到项目文件各个历史版本:Alt+Shift+C,可以看到项目最近的修改.这就是它的版本集成功能特性 ...

  9. Javascript 字符串(二)常用操作整理

    一.js获取字符串的字节数 这个好使--- function getBytesLength(str) { // 在GBK编码里,除了ASCII字符,其它都占两个字符宽 return str.repla ...

随机推荐

  1. java多线程快速入门(十)

    synchonizd解决安全性问题 package com.cppdy; class MyThread6 implements Runnable{ private Integer ticketCoun ...

  2. poj3468

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define ...

  3. SPLAY,LCT学习笔记(一)

    写了两周数据结构,感觉要死掉了,赶紧总结一下,要不都没学明白. SPLAY专题: 例:NOI2005 维修数列 典型的SPLAY问题,而且综合了SPLAY常见的所有操作,特别适合新手入门学习(比如我这 ...

  4. python3 + selenium 之文件上传下载

    文件上传 文件上传下载的联系html: uplad.html <html> <head> <meta http-equiv="content-type" ...

  5. hdu 1548 升降梯

    题目大意:有一个升降机,它有两个按钮UP和DOWN,给你一些数i表示层数,并且每层对应的Ki,如果按UP按钮,会从第i层升到第i+Ki层:如果按了DOWN则会从第i层降到第i-Ki层:并规定能到的层数 ...

  6. 点分治 poj1741

    题意: 给出一颗树,询问有多少对点对距离<=k 链接: http://poj.org/problem?id=1741 题解: 点分治的模板题 点分治即采用分治思想分而治之 考虑一颗子树内距离&l ...

  7. Codeforces 460D Little Victor and Set(看题解)

    Little Victor and Set 其他都很好求, 只有k == 3的时候很难受.. 我们找到第一个不大于l的 t, 答案为 l, 3 * t, (3 * t) ^ l 感觉好像是对的, 感觉 ...

  8. KNN分类算法补充

    KNN补充: 1.K值设定为多大? k太小,分类结果易受噪声点影响:k太大,近邻中又可能包含太多的其它类别的点. (对距离加权,可以降低k值设定的影响) k值通常是采用交叉检验来确定(以k=1为基准) ...

  9. jquery 中remove()与detach()的区别

    remove()与detach()方法都是从dom中删除所有的元素 两者的共同之处在于都不会把匹配的元素从jQuery对象中删除. 不同之处在于用remove()删除的元素,除了元素被保留,其他的在这 ...

  10. CSS3滚动条美化,CSS3滚动条皮肤

    CSS3 -webkit-scrollbar滚动条皮肤美化实现,利用-webkit-scrollbar,-webkit-scrollbar-track,-webkit-scrollbar-thumb这 ...