Ⅰ 如何在WebBrowser控件中获取post参数
如何在WebBrowser控件中获取post参数?就像获取cookie一样。
WebBrowser本身有没有办法?
如果没有,能不能通过其它办法?就像httplook,HttpSniffer一样截取http协议包,然后分析,有
没有这方面的例子?估计要用到API,但不知道怎么样实现的。
网页与应用程序的交互不外乎是网页上点击某链接,或通过其它途径,比如表单提交等,使浏览器
导航至新的链接,所以我通过BeforeNavigate2这个事件来,该事件有flags、headers、postData、
targetFrameName、uRL等属性,足够我们进行处理。这样我们程序就好像一个WebServer,可以处理
网页上的链接、提交的表单等等。然后把使浏览器导航至处理后产生的结果网页。
又在网上看到有人用System.Runtime.InteropServices.Expando.IExpando:
mshtml.HTMLDocumentClass doc2=(mshtml.HTMLDocumentClass)webBrowser.Document;
System.Runtime.InteropServices.Expando.IExpando ex=
(System.Runtime.InteropServices.Expando.IExpando)doc2;
System.Reflection.PropertyInfo piform1=ex.AddProperty( "Form1 ");
piform1.SetValue(doc2,this,null);
这样,在网页中的document.Form1就是这个WinForm的Control了。你可以用脚本来调用Form1!
这也不失为一个极妙的方法。
----------------------------
如何获得webBrowser中POST的数据
http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.webbrowser.document.aspx
//引用 shdocvw.dll
(this.webbrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow2 += new
SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(NewWindow2);
----------------------------------------
System.Web.HttpUtility.UrlEncode(viewState);
// 将提交的字符串数据转换成字节数组
byte[] postData = Encoding.ASCII.GetBytes(postString);
byte[] bytes = Encoding.Default.GetBytes(Parameters);
----------------------------------------
HttpWebRequest发送自定义POST请求
平时用浏览器看网页的时候,点击一下submit按钮的时候其实就是给服务器发送了一个POST请求。
但是如何在自己的C#程序里面实现类似的功能呢?本文给出了一个简单的范例,可以实现类似的和
web server之间的POST通讯。通过程序发送POST的过程如下所示:
1. 创建httpWebRequest对象
HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。
WebRequest是获得一些列应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确
定最终创建的对象类型。所以我们的程序里面有一个对返回对象的类型进行测试的过程。
2. 初始化HttpWebRequest对象
这个过程提供一些http请求常用的属性:agentstring,contenttype等其中agentstring比较有意思
,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚
至是mac里面的safari。很多认真设计的网站都会根据这个值来返回对用户浏览器特别优化过的代码
。
3. 附加要POST给服务器的数据到HttpWebRequest对象
附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象
提供的一个stream里面。
4. 读取服务器的返回信息
读取服务器返回的时候,要注意返回数据的encoding。如果我们提供的解码类型不对会造成乱码。
比较常见的是utf-8和gb2312之间的混淆,据我测试,国内的主机一般都是gb2312编码的。一般设计
良好的网站会把它编码的方式放在返回的http header里面,但是也有不少网站根本没有,我们只能
通过一个对返回二进制值的统计方法来确定它的编码方式。
------------------------------------------
基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送
响应信息、关闭连接。这就好像上面的例子,我们电话订货的全过程。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协
议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作
为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以
及可能的实体内容。
---------------------------------
POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet
的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用
户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,
而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
pop3是接收电子邮件协议,属于TCP/IP协议族中的成员。 smtp是发送电子邮件协议。 当你使用
Email时就离不开他们
Ⅱ 京东post登陆参数js分析,密码加密的RSA加密实现
老规矩先用错误信息登陆一下抓一下包,看看有那些post字段:
大概我们就知道我们要分析的字段有nloginpwd其余字段还不清楚,就在上下在看看其他数据包,根据pubkey我们猜测加密方式大概是RSA,继续查看其他数据包,找到一个有价值的get包
信息是:
没有发现明确的关键字,但是可以猜想bg、challenge、patch应该和我们的加密参数相关,但是不确定,只有继续分析加密的js片段:
其中好几个字段都是$("#??")格式,这种表示是来自页面的,那在看看网页源码
果然发现了很多有价值的东西在post表单中的,其中只有两个参数是需要单独获取的,其余都是从html源码里面解析出来的
authcode来源
是获取的源码中的一个值,再看源码
看样子是在验证码操作的时候触发的一个请求,返回的authcode的值,查看authcode请求的数据包
这个请求看起来不是那么友好,有好几个疑似加密字段,这个参数暂时放放,继续分析我们的passWord的加密。
继续深入getEntryptPwd($('#nloginpwd').val()),查看源码
核心的就两行
encrypt.setPublicKey(pubKey); return encrypt.encrypt(pwd);这必定是RSA加密无疑了,继续查看源码,单独的一个源码文件,一共3300多行,删减版如下
JSEncrypt是前端使用的实现RSA加密的库,看样子应该比较标准,那就试试能不能改写了,复制全部源码到node.js,会提示navigator、window未定义,这个问题很简单,在文件头定义
var navigator = this;
var window = this
然后在文件尾部写个调用程序试试
是可以成功返回RSA加密结果的
京东的post请求不是太难,参数也能在源码中找到,但是他的难度在发出post请求之前的一个get请求,这个get请求和验证有关,和用户名相关,简单看了一下感觉有点复杂,留在第二篇讲获取authcode参数的其他参数是怎么来的。
ID:python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究和分享技术瓶颈,欢迎关注
独学而无友,则孤陋而寡闻!
Ⅲ html中的js如何获取通过POST方法传递过来的参数
可以通过解析url路径,获取参数:
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/+/g, '%20'))||null;
}
var orgid = getURLParameter('orgid');
var orglevel = getURLParameter('orglevel');
console.log('orgid='+orgid);
console.log('orglevel='+orglevel);
(3)根据源码确定post参数扩展阅读
html中通过url地址传参及获取参数:
var url = document.location.toString();//获取url地址
var urlParmStr = url.slice(url.indexOf('?')+1);//获取问号后所有的字符串
var arr = urlParmStr.split('&');//通过&符号将字符串分割转成数组
var courseId = arr[0].split("=")[1];//获取数组中第一个参数
var unit_title=arr[1].split("=")[1];//第二个参数
unit_title=decodeURI(unit_title);//转码将解码方式unscape换为decodeURI,将中文参数获取
console.log(unit_title);
Ⅳ 关于php中POST传递参数问题
将数据转换成 json 格式的字符串, 并通过 CURL 的 POST 的形式传递参数给服务端, 但是在服务端无法用 $_POST 获取到数据。后台用 $_POST 获取到的信息为空, 但是可以通过 $post = file_get_contents("php://input") 获取到请求的相关信息。
Coentent-Type 的值为 application/x-www-data-urlencode 和 multipart/form-data 时, php才会将http请求数据包中的数据填进 $_POST 。
如果 POST 的原始数据是一维数组或&拼接的标准格式的键值对字符串,那么可以用 $_POST 来获取。
如果要通过 file_get_contents 获取,这种情况下可以发送 json 字符串,用 json_encode 编码转换一下,或者使用 http_build_query 。
1、 区别 PHP 的 $_POST、$HTTP_RAW_POST_DATA 和 php://input
2、 accept 和 content-Type区别
3、 Http Header里的Content-Type
Ⅳ idea测试post请求带参数
创建类PostParameter
//post通过body传参(配和post_text.html)
@WebServlet("/postparameter")
public class PostParameter extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//防止返回的结果乱码
resp.setContentType("text/html;charSet=utf-8");
//得到请求参数的值
String post = req.getParameter("s");
//返回结果
resp.getWriter().println("post传参结果:" + post);
}
}
复制
创建post_text.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用post——get得参数</title>
</head>
<body>
<form action="postparameter" method="post">
<div style="margin-top:50px;margin-left:40%;">
<h1 style="padding-left:50px;">post传参</h1>
参数:<input type="text" name="s">
<input type="submit" value=" 提 交 ">
</div>
</form>
</body>
</html>
结果:可以看到传入的数据
获取 POST 请求中的参数(2)
1.如果 POST 请求中的 body 是按照 JSON 的格式来传递, 那么通过 getParameter 就获取不到参数的值了!!!
类还是上面的PostP
Ⅵ 修改网页源码VC 编程实现在本地修改网页源代码,同时保证POST提交数据有效
一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null。例如 :!--[if !supportLists]-->1 !--[endif]-->var url = login.jsp?user=XXX&pwd=XXX;!--[if !supportLists]-->2 !--[endif]-->xmlHttpRequest.open(GET,url,true);!--[if !supportLists]-->3 !--[endif]-->xmlHttpRequset.send(null);
此外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方 法。 例如:!--[if !supportLists]-->1 !--[endif]-->xmlHttpRequest.open(POST,login.jsp,true);!--[if !supportLists]-->2 !--[endif]-->xmlHttpRequest.setRequestHeder(Content-Type,application/x--form-urlencoded;charset=UTF-8);!--[if !supportLists]-->3 !--[endif]-->xmlHttpRequest.send(user=+username+&pwd=+password);
需要注意的是根据提交方式的不同,两种提交方式分别调用后台的doGet方法和doPost方法。
Ⅶ 关于php获取post值的问题!
在php的配置文件里,有一个开关叫做:register_globals,如果是on,则post提交以后,直接用$字段,就可以取到post的值了,出于安全性考虑,这个开关在新版的php里默认是关闭的,当这个开关是关闭的时候,你可以用以下的代码来模拟这个效果:
if(!ini_get('register_globals')){
extract($_POST);
extract($_GET);
}
Ⅷ c#从post中获取参数
<input type="text" ID="PHONE" runat="server"/>
再加个name="PHONE" 。post的提交需要name属性的。应该是。
Ⅸ java post请求参数怎么写
//serverURL url地址
HttpPost httpPost = new HttpPost(serverURL);
//param 为参数
StringEntity entity = new StringEntity(param);
entity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
还可以用map作为参数
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
if(param!=null){
Set set = param.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = param.get(key);
formparams.add(new BasicNameValuePair(key.toString(), value.toString()));
}
}
Ⅹ httpclient中post参数设置
// post Sent cookie 这个Post 发送去的Cookie
HttpPost httpPost = new HttpPost(uri)
httpPost.addHeader("Cookie", "ONE_VER=1_0");
//下面是发送的实体内容。发出去的是被转义的内容,如果是不转义发送,我也不知道怎么发,请高手指教。
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("实体内容", ""));
//下面是返回内容
CloseableHttpResponse response = httpclient.execute(httpPost);
try{
//要运行内容,如果要处理接收的内容,请在这里写。
} finally {
response.close();
}