PowerShell中使用curl(Invoke-WebRequest)的方法教程
前言
PowerShell能干什么呢?PowerShell首先是个Shell,定义好了一堆命令与操作系统,特别是与文件系统交互,能够启动应用程序,甚至操纵应用程序;第二,PowerShell允许将几个命令组合起来放到文件里执行,实现文件级的重用,也就是说有脚本的性质;第三,PowerShell能够能够充分利用.Net类型和COM对象,来简单地与各种系统交互,完成各种复杂的、自动化的操作。
当我们习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool。然而命令行真的会比界面快的多,如果你是一个码农。
situation:接到需求分析bug,需要访问http。那台机器属于product,不允许装postman。我只能手动命令行来发请求。发现了内置的PowerShell中有curl命令。欢喜试了半天,总是命令不对,google发现这个curl是冒名顶替的,只是一个Invoke-WebRequest的alias。参考。
PS>Get-Alias-DefinitionInvoke-WebRequest|Format-Table-AutoSize CommandTypeNameVersionSource ---------------------------- Aliascurl->Invoke-WebRequest Aliasiwr->Invoke-WebRequest Aliaswget->Invoke-WebRequest
Invoke-WebRequest简单用法
1.用途
GetscontentfromawebpageontheInternet.
获取httpweb请求访问内容
2.语法Syntax
ParameterSet:Default Invoke-WebRequest[-Uri][-Body
3.简单的几个用法
3.1Get请求
PSC:\Users\rmiao>curl-URihttps://www.google.com StatusCode:200 StatusDescription:OK Content:会发现content内容被截断了。想要获取完整的content:
ps>curlhttps://www.google.com|Select-ExpandPropertyContent3.2添加header
-Headers@{"accept"="application/json"}3.3指定Method
-MethodGet3.4将获取到的content输出到文件
-OutFile'c:\Users\rmiao\temp\content.txt'3.5表单提交
Forexample: $R=Invoke-WebRequesthttp://website.com/login.aspx $R.Forms[0].Name="MyName" $R.Forms[0].Password="MyPassword" Invoke-RestMethodhttp://website.com/service.aspx-Body$Ror
Invoke-RestMethodhttp://website.com/service.aspx-Body$R.Forms[0]3.6内容筛选
PSC:\Users\rmiao>$R=Invoke-WebRequest-URIhttp://www.bing.com?q=how+many+feet+in+a+mile PSC:\Users\rmiao>$R.AllElements|where{$_.innerhtml-like"*=*"}|Sort{$_.InnerHtml.Length}|SelectInnerText- First5 innerText --------- = 1 Next =3.7一个登陆示例
#发送一个登陆请求,声明一个sessionVariable参数为fb,将结果保存在$R #这个变量FB就是header.cookie等集合 PSC:\Users\rmiao>$R=curlhttp://www.facebook.com/login.php-SessionVariablefb PSC:\Users\rmiao>$FB Headers:{} Cookies:System.Net.CookieContainer UseDefaultCredentials:False Credentials: Certificates: UserAgent:Mozilla/5.0(WindowsNT;WindowsNT6.3;en-US)WindowsPowerShell/4.0 Proxy: MaximumRedirection:-1 #将response响应结果中的第一个form属性赋值给变量Form PSC:\Users\rmiao>$Form=$R.Forms[0] PSC:\Users\rmiao>$Form.fields KeyValue -------- lsdAVqQqrLW display enable_profile_selector isprivate legacy_return0 profile_selector_ids return_session skip_api_login signed_next trynum1 u_0_0 u_0_1 lgnrnd214945_qGeg lgnjsn email pass persistent default_persistent1 #查看form PSC:\Users\rmiao>$Form|Format-List Id:login_form Method:post Action:/login.php?login_attempt=1&lwv=100 Fields:{[lsd,AVqQqrLW],[display,],[enable_profile_selector,],[isprivate,]...} #查看属性 $Form.fields #设置账号密码 $Form.Fields["email"]="User01@Fabrikam.com" $Form.Fields["pass"]="P@ssw0rd" #发送请求并保存结果为$R $R=Invoke-WebRequest-Uri("https://www.facebook.com"+$Form.Action)-WebSession$FB-MethodPOST-Body$Form.Fields #查看结果 PSC:\Users\rmiao>$R.StatusDescription OK虽然没有curl那么主流,但一样可以成为http访问的一个选择。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
参考
https://technet.microsoft.com/en-us/library/hh849901.aspx