前言:  通过Fiddler抓取浏览器请求数据,相信大家已经都会用了,我们知道Fiddler是通过在本机计算器添加一个默认的代理服务器来实现的抓包数据的,端口号为:8888。

其实当我们打开Fiddler的设置也可以看到:

然后查看本地计算器的网络代理设置:

基于上面的原理,Fiddler就实现了经过本机计算器请求的数据抓包了。。。

那么,我们通过C#代码,在.net Core中使用HttpClient发送的请求,是不是也能被Fiddler抓包呢???

实际上默认情况是抓不到的,但是微软给我们预留了一个可以配置请求代理服务器的口子,我们可以通过这个口子,来设置程序的代理服务器,

将代理服务器设置为本机:127.0.0.1,端口号设置为:8888,这样就可以被Fiddler抓包了。  通过程序内抓包呢,我们能监控到我们发送的数据包,请求头,Cookie,票据等等到底是什么样的,就能分析出一些问题所在。

下面就贴出本人在.net Core3.0的框架下,测试使用程序内抓包的代码:

1-自定义代理类:

/// <summary>
/// 我的代理类
/// </summary>
public class MyProxy : IWebProxy
{
//代理的地址
public MyProxy(Uri proxyUri)
{
//设置代理请求的票据
credentials = new NetworkCredential("用户名", "密码");
ProxyUri = proxyUri;
}
private NetworkCredential credentials; private Uri ProxyUri; public ICredentials Credentials { get => credentials; set => throw new NotImplementedException(); } //获取代理地址
public Uri GetProxy(Uri destination)
{
return ProxyUri; // your proxy Uri
}
//主机host是否绕过代理服务器,设置false即可
public bool IsBypassed(Uri host)
{
return false;
}
  }
}

2-使用代理发送请求:

MyProxy myProxy = new MyProxy(new Uri("http://127.0.0.1:8888"));
var httpClientHandler = new HttpClientHandler() { Proxy = myProxy };
var httpClient = new HttpClient(httpClientHandler); HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "https://www.baidu1.com");
httpClient.SendAsync(httpRequestMessage);

3-Copy2-也可以使用.net core中的注入客户端的方法为特定命名下的客户端统一默认添加代理:

//命名客户端注入
services.AddHttpClient("domainServiceClient").ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
AllowAutoRedirect = false,
UseDefaultCredentials = true,
Proxy = new MyProxy(new Uri("http://127.0.0.1:8888"))
};
}); //构造函数使用,使用的名称需与命名保持一致 public HttpClient HttpClient = null;
public DomainMappingMiddleware(IHttpClientFactory clientFactory)
{
this.HttpClient = clientFactory.CreateClient("domainServiceClient");
}

最后查看Fiddler的监控请求,可以看到我们已经抓到了请求域名为:www.baidu1.com的程序内的请求了(模拟程序内代理请求成功):

.net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包的更多相关文章

  1. Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 【JAVA】通过HttpClient发送HTTP请求的方法

    HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...

  4. (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    (一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...

  5. Httpclient发送json请求

    一.Httpclient发送json请求 public String RequestJsonPost(String url){    String strresponse = null;    try ...

  6. .Net core webapi使用httpClient发送异步请求遇到TaskCanceledException: A task was canceled

    前言:本人最近较多使用.net core的项目,最近在使用httpClient发送请求的时候,遇到服务器处理时间较长时,就老是会报异常:TaskCanceledException: A task wa ...

  7. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...

  8. 通过 Apache Commons HttpClient 发送 HTTPS 请求

    1.通过 HTTPS 发送 POST 请求: 2.HTTPS 安全协议采用 TLSv1.2: 3. 使用代理(Proxy)进行 HTTPS 访问: 4.指定 Content-Type 为:applic ...

  9. 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

    这里使用的是HttpComponents-Client-4.1.2 package com.jadyer.util; import java.io.File; import java.io.FileI ...

随机推荐

  1. 用canvas写飞机大战

    1.老规矩,当我们开始做项目的时候,我们第一步就是要进行分析,当我们的游戏开始做的时候我们要把一整个游戏分成五个阶段来写: 五个阶段和我方飞机的生命值,还有游戏的得分情况如下: //游戏欢迎状态 co ...

  2. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  3. Geoserver设置style

    1 背景 我们在ArcMap中可以直接通过symbol功能对图层进行定制化配图.但是,如果我们将配好图的shp图层在GeoServer中发布时,会发现图层样式完全丢失了.其实原因很简单,用ArcMap ...

  4. 生命周期感知 Lifecycle

    奉上翻译原文地址: 处理生命周期 :翻译过程中加上了自己的一点理解.理解不对的地方直接评论就好. 生命周期感知组件可以感知其他组件的生命周期,例如 Activity,Fragment等,以便于在组件的 ...

  5. SAP中的数据库表索引

    数据库表中的索引可以加快查询的速度.索引是数据库表字段的有序副本.附加的字段包含指向真实数据库表行的指针.排序可以使访问表行的速度变快,例如,可以使用二分搜索.数据库表至少有一个主索引,由它的key字 ...

  6. C# Replace字符替换函数

    它可以将字串内的字符替换为别的字符,可以嵌套使用,如下: 需要注意的是,它可以把字符替换为空,但不可以替换空字符,当不确定字符串是否为空时,可以进行以下判断,再替换: 示例的完整代码: string ...

  7. .Net Core 项目发布到Linux - CentOS 7(二)用Supervisor守护netcore进程

    简介 supervisor可以保证程序崩溃后,可以重新把程序启动起来等相关功能. 安装 yum install -y supervisor 安装好后在/etc/会生成一个supervisord.con ...

  8. js 淡入淡出的tab选项卡

    代码如下 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  9. ELK日志分析系统(2)-logspout收集容器日志

    1. 概述 安装了ELK之后,就是要考虑怎么获取log数据了. 收集log数据的方式有很多种: 1). beats采集数据发布到logstash 2). Filebeat采集数据发布到logstash ...

  10. Python @classmethod和@staticmethod装饰器使用介绍

    @classmethod和@staticmethod装饰器使用介绍 by:授客 QQ:1033553122 简介 静态方法:类中用 @staticmethod装饰的不带 self 参数的方法.类的静态 ...