相关疑难解决方法(0)

如何查看HttpWebRequest类发送的原始HTTP请求?

我知道你们都会回答"使用像Fiddler这样的调试代理服务器",但事情并非那么简单.

这是我的情况:我有一些代码在服务器上运行,在ASP.NET页面代码隐藏(aspx.cs)中,其中(除其他外)建立与另一个服务器的连接,抓取一些东西,然后格式化它并将其返回给浏览器.

问题是其他服务器做错了,所以我希望能够将调试标志传递到页面中(通过查询字符串,例如?debug = true),这样它就会打印出完全原始的 HTTP请求它发送到其他服务器所以我可以看到什么是错的.这段代码在几个地方运行,所以我希望能够在dev,staging或production上传递这个标志,只看到请求,而不必弄清楚生产服务器是否可以与某处存在的代理服务器通信等

你会认为这样做很容易,对吧?所以我觉得我疯了或者别的什么,但我查看了HttpWebRequest及其父类WebRequest的参考资料 - 什么都没有.没有办法.你会认为微软会想到这一点.最接近的是你可以访问"Headers"集合,但是当我尝试它时,它省略了一些非常重要的标题,如"内容长度" - 所以它必须"撒谎"给我(我知道它在撒谎,因为我知道因为远程服务器返回200状态 - 请求成功,它只返回错误/不同/错误的数据)

这是ask-for代码示例:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.whatever.com");
req.Method = ... whatever ...;
... other setup for the request ...
/* At this point we are about to send the request.
   What does the raw HTTP request look like? */
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Run Code Online (Sandbox Code Playgroud)

c# asp.net debugging proxy httpwebrequest

64
推荐指数
4
解决办法
7万
查看次数

Httplistener支持https

似乎有很多令人困惑的,有时是冲突的信息,关于使.net HTTPListener https能够.我的理解如下:

  • 一个人的c#代码需要一个https前缀(例如https://*:8443),以便监听器理解它需要在此端口上为SSL请求提供服务.

  • 实际的SSL握手发生在幕后并由http.sys(安装在Windows机器上的某处)进行处理; C#代码不必显式管理ssl握手,因为它发生在封面下.

  • 需要在计算机上安装"x509可信证书" httpListener,并且某种程度上证书需要绑定到端口8443(在此示例中)

我的理解是否正确?如果没有,请教育我.

关于x509证书,我的理解是:

  • 使用makecert创建X509证书.此证书存储在个人存储中,需要转移到可信存储(这是http侦听器所在的位置).似乎我可以certMgr用来执行移动,或者我可以mmc用来实现移动.似乎还有超过1 X509证书格式(DER,Base64,pks,PSWD保护pks私有等)..有,我应该使用首选格式?

一旦我将证书带入可信商店,我就需要将它绑定到tcp端口.我在Win7上:我应该使用httpcfg还是netsh

任何提示/建议将不胜感激.

.net httplistener x509certificate

59
推荐指数
4
解决办法
6万
查看次数

如何从Chrome和Firefox获取打开网页的网址?

我正在编写一个系统托盘应用程序,需要检查基于内部网络的应用程序是否已打开.

我可以使用以下方法检查IE:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
        string filename;
        bool sdOpen = false;
        foreach (SHDocVw.InternetExplorer ie in shellWindows)
        {
            filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
            if (filename.Equals("iexplore"))
            {
                string[] urlParts = (ie.LocationURL.ToString()).Split('/');
                string website = urlParts[2];
                if (website == "myApp:8080") { sdOpen = true; };
            }
        }

        if (sdOpen) { Console.WriteLine("App is open"); } else { Console.WriteLine("App is not open"); };

        Console.ReadKey(true);
Run Code Online (Sandbox Code Playgroud)

但是,部分使用该系统的用户更喜欢使用Chrome或Firefox.

如何为Chrome和Firefox执行与上述相同的操作(即获取浏览器中任何打开的标签的网址)?(我不会打扰其他浏览器,因为这些是我们组织中唯一使用的浏览器.)

c# url firefox google-chrome

22
推荐指数
2
解决办法
4万
查看次数

如何创建一个简单的c#http monitor/blocker?

我正在阅读这个问题(如何在C#中创建一个简单的代理?),这几乎是我的意愿.

我只想要开发ac#app,例如,监控Firefox,IE等,并记录所有导航页面.根据访问过的页面,我想阻止该网站(如父母过滤器).

代码片段/样本很好,但如果您能告诉我使用该类的方向,我将不胜感激.:-)

c# monitoring http blocking

7
推荐指数
2
解决办法
3万
查看次数

是否可以更改在网页上运行客户端的脚本?

所以我在我的笔记本电脑上在线玩游戏,这是一个非常简单的 html5 游戏,但优化并不存在。我的屏幕上有几个圆圈的游戏使用了我 85% 的 CPU。

从逻辑上讲,我开始分析游戏并试图弄清楚是否可以为我的笔记本电脑优化它。现在,我想知道如何运行游戏但使用正在运行的 JS 脚本的调整版本。

如果我尝试保存页面并从我的笔记本电脑上运行它,它当然有 CORS 问题,所以我无法访问服务器。

我可以以某种方式稍微更改在我的浏览器中执行的脚本,但同时仍停留在正在运行的“网页内”,以便我可以正常地向服务器发出 XHR 请求?

另外,虽然这不在问题的标题中,但我能否以某种方式将 XHR 请求代理到我的脚本,同时又不违反 CORS 规则?

如果我从浏览器和桌面上保存的 HTML 运行相同的东西,为什么会如此不同?我有相同的 IP 并且正在做同样的事情,但从 url 来看,它“感觉就像”我正在从其他地方运行它。我可以以某种方式模仿我正在“从网页”运行,而是从修改后的保存的 html 运行它吗?

html javascript client-side

7
推荐指数
1
解决办法
3670
查看次数

复制Http Request InputStream

我正在实现一个代理操作方法,该方法转发传入的Web请求并将其转发到另一个网页,添加一些标头.动作方法为GET请求工作文件,但我仍然在努力转发传入的POST请求.

问题是我不知道如何正确地将请求主体写入传出的HTTP请求流.

这是我到目前为止的缩短版本:

//the incoming request stream
var requestStream=HttpContext.Current.Request.InputStream;
//the outgoing web request
var webRequest = (HttpWebRequest)WebRequest.Create(url);
...

//copy incoming request body to outgoing request
if (requestStream != null && requestStream.Length>0)
            {
                long length = requestStream.Length;
                webRequest.ContentLength = length;
                requestStream.CopyTo(webRequest.GetRequestStream())                    
            }

//THE NEXT LINE THROWS A ProtocolViolationException
 using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
                {
                    ...
                }
Run Code Online (Sandbox Code Playgroud)

一旦我在传出的http请求上调用GetResponse,我就会收到以下异常:

ProtocolViolationException: You must write ContentLength bytes to the request stream before calling [Begin]GetResponse.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会发生这种情况,因为requestStream.CopyTo应该负责编写正确数量的字节.

任何建议将不胜感激.

谢谢,

阿德里安

c# asp.net asp.net-mvc webrequest httpwebrequest

6
推荐指数
1
解决办法
2万
查看次数