本文的目的是介绍如何发出HTTPPOSTWeb请求的详细情况,特别关注如何发送http请求的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何发出HTTPPOSTWe
本文的目的是介绍如何发出HTTP POST Web请求的详细情况,特别关注如何发送http请求的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何发出HTTP POST Web请求的机会,同时也不会遗漏关于Android:如何发出HTTP HEAD请求?、AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST、c# – 从后面的代码发出http请求、C# 利用 HttpWebRequest 进行 HTTPS 的 post 请求的示例的知识。
本文目录一览:- 如何发出HTTP POST Web请求(如何发送http请求)
- Android:如何发出HTTP HEAD请求?
- AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST
- c# – 从后面的代码发出http请求
- C# 利用 HttpWebRequest 进行 HTTPS 的 post 请求的示例
如何发出HTTP POST Web请求(如何发送http请求)
Canonical
如何使用该 方法 发出HTTP请求并发送一些数据POST
?
我可以GET
提出请求,但是我不知道如何提出POST
请求。
答案1
小编典典有几种执行HTTP GET
和POST
请求的方法:
方法A:HttpClient(首选)
可用:.NET Framework 4.5+
,.NET Standard 1.1+
,.NET Core 1.0+
。
目前,它是首选方法,并且具有异步性和高性能。在大多数情况下,请使用内置版本,但对于非常旧的平台,则提供了NuGet软件包。
using System.Net.Http;
设定
建议HttpClient
在应用程序的生命周期中实例化一个实例,并共享它,除非您有特殊原因不这样做。
private static readonly HttpClient client = new HttpClient();
请参阅HttpClientFactory
以获取依赖项注入解决方案。
POST
var values = new Dictionary<string, string>
{
{ “thing1”, “hello” },
{ “thing2”, “world” }
};var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx”, content);
var responseString = await response.Content.ReadAsStringAsync();
GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
方法B:第三方库
RestSharp
POST
var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest(“resource/{id}”);
request.AddParameter(“thing1”, “Hello”);
request.AddParameter(“thing2”, “world”);
request.AddHeader(“header”, “value”);
request.AddFile(“file”, path);
var response = client.Post(request);
var content = response.Content; // Raw content as string
var response2 = client.Post(request);
var name = response2.Data.Name;
Flurl.Http
这是一个更新的库,具有流畅的API,测试助手,在后台使用HttpClient且可移植。可通过NuGet获得。
using Flurl.Http;
POST
var responseString = await "http://www.example.com/recepticle.aspx".PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" }).ReceiveString();
GET
var responseString = await "http://www.example.com/recepticle.aspx".GetStringAsync();
方法C:HttpWebRequest(不建议用于新工作)
可用:.NET Framework 1.1+
,.NET Standard 2.0+
,.NET Core 1.0+
。在.NET
Core中,它主要是为了兼容性-它可以包装HttpClient
,性能较低且不会获得新功能。
using System.Net;using System.Text; // For class Encodingusing System.IO; // For StreamReader
POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var postData = “thing1=” + Uri.EscapeDataString(“hello”);
postData += “&thing2=” + Uri.EscapeDataString(“world”);
var data = Encoding.ASCII.GetBytes(postData);request.Method = “POST”;
request.ContentType = “application/x-www-form-urlencoded”;
request.ContentLength = data.Length;using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
方法D:WebClient(不建议用于新工作)
这是一个包装HttpWebRequest
。与比较HttpClient
。
可在:.NET Framework 1.1+
,NET Standard 2.0+
,.NET Core 2.0+
using System.Net;using System.Collections.Specialized;
POST
using (var client = new WebClient())
{
var values = new NameValueCollection();
values[“thing1”] = “hello”;
values[“thing2”] = “world”;var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);var responseString = Encoding.Default.GetString(response);
}
GET
using (var client = new WebClient())
{
var responseString = client.DownloadString("http://www.example.com/recepticle.aspx”);
}
Android:如何发出HTTP HEAD请求?
我怎么能在Android中做到这一点?
解决方法
正如njzk2建议的那样,使用HttpClient()它非常简单:
HttpResponse response = new HttpClient().execute(new HttpHead(myUrl));
但是,无法关闭连接存在问题.通常在HttpClient上,您将使用以下内容获取实体:
httpentity entity = response.getEntity();
然后你会得到来自实体的输入流
InputStream instream = entity.getContent(); ... instream.close();
通过关闭输入流,连接将关闭.
但是,在HEAD请求的情况下,实体似乎为空(可能是因为HEAD请求不返回响应中的主体),因此无法获取和关闭输入流,并且连接也不会关闭.
在他的答案的最后编辑中,njzk2建议使用androidhttpclient,这是HttpClient的最新实现(API 8),它实际上有一个close()方法.我没有用它,但我想它会正常工作.但是,正如Android开发团队所建议的那样,HttpUrlConnection应该是首选的Android客户端.
使用HttpUrlConnection:
实际上,使用HttpUrlConnection创建HEAD请求似乎很容易,并确保连接关闭:
HttpURLConnection urlConnection = null; System.setProperty("http.keepAlive","false"); try { URL url = new URL(stringUrl); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("HEAD"); urlConnection.getInputStream().close(); } catch (MalformedURLException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } finally { if (urlConnection != null) { urlConnection.disconnect(); } }
AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST
我正在编写一个简单的库应用程序,以准备使用AngularJS进行更大的项目。在在线阅读了很多有关$resource
与RESTful
API交互的知识之后,我决定实现它可能会带来一些节省时间和扩展性的好处,而不是$http
用于每个请求。问题是由于某种原因(我不是CORS专家,并且请求正在跨域发送)在使用$save
我的Node.js控制台显示的方法时:
OPTIONS /books 200 1ms - 161b
使用该query()
方法效果很好-节点控制台显示:
GET /books 200 1ms - 228b
在这一点上,我已经停留了几个小时,尝试对以下内容进行变体,但是对于该方法,它最终始终是OPTIONS请求而不是POST(根据Angular文档,应该是POST)$save
。
AngularJS Web应用
app.js
var libraryApp = angular.module('libraryApp',['ngResource','ngRoute','libraryControllers']);
libraryApp.factory('$book',['$resource',function ($resource) {
return $resource('http://mywebserver\\:1337/books/:bookId',{ bookId: '@bookId' });
}]);
controllers.js
var libraryControllers = angular.module('libraryControllers',[]);
libraryControllers.controller('BookCtrl',['$scope','$book',function($scope,$book) {
...
$scope.addBook = function () {
var b = new $book;
b.isbn = "TEST";
b.description = "TEST";
b.price = 9.99;
b.$save();
};
}]);
具有Express REST API的Node.js
app.js
var express = require('express'),books = require('./routes/books'),http = require('http'),path = require('path');
var app = express();
...
// enable cross-domain scripting
app.all('*',function(req,res,next) {
res.header("Access-Control-Allow-Origin",req.headers.origin);
res.header("Access-Control-Allow-Headers","X-Requested-With");
next();
});
// routing
app.get('/books',books.getAll);
app.get('/books/:isbn',books.get);
// This is what I want to fire with the $save method
app.post('/books',books.add);
http.createServer(app).listen(app.get('port'),function(){
console.log('Express server listening on port ' + app.get('port'));
});
./routes/books.js
...
exports.add = function(req,res) {
console.log("POST request received...");
console.log(req.body.isbn);
};
试图把这行放在我的配置函数中,delete $httpProvider.defaults.headers.common["X-Requested-
With"];
但是没有变化。
我不是Angular / Node专业人士,但现在我在想这与跨域有关,就像我说的那样,我不是CORS专家。
提前致谢。
c# – 从后面的代码发出http请求
我不确定我将如何从代码隐藏和它们的代码片段中调用它,它说:
https://platform.3cinteractive.com/api/send_message.PHP POST username=aRDSe3vcaMzh06YrMcxcQw==&password=1BSvQc6lpNlnp4ufWgRLPHNJ7RMrL8CcaWCzL1Vtw+Y=&phone_number=+11234567890&trigger_id=1105&message=howdy
解决方法
// Create a request for the URL. WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html"); // If required by the server,set the credentials. request.Credentials = CredentialCache.DefaultCredentials; // Get the response. HttpWebResponse response = (HttpWebResponse)request.GetResponse (); // display the status. Console.WriteLine (response.StatusDescription); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream (); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader (dataStream); // Read the content. string responseFromServer = reader.ReadToEnd (); // display the content. Console.WriteLine (responseFromServer); // Cleanup the streams and the response. reader.Close (); dataStream.Close (); response.Close ();
C# 利用 HttpWebRequest 进行 HTTPS 的 post 请求的示例
最近一个推送信息的目标接口从 http 格式换成 https 格式,原来的请求无法正常发送,所以修改了发送请求的方法。标红的代码是新加了,改了之后就可以正常访问 (不检测证书的)
public static string PostData3(string posturl, string postData, Encoding encoding)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
if (posturl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(posturl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else {
request = WebRequest.Create(posturl) as HttpWebRequest;
}
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
// request.TransferEncoding = encoding.HeaderName;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
// 发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
// 直到 request.GetResponse () 程序才开始向目标网页发送 Post 请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
// 返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
LogHelper.Error ("Post 第三方地址" + posturl, ex);
return string.Empty;
}
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
关于如何发出HTTP POST Web请求和如何发送http请求的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android:如何发出HTTP HEAD请求?、AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST、c# – 从后面的代码发出http请求、C# 利用 HttpWebRequest 进行 HTTPS 的 post 请求的示例等相关内容,可以在本站寻找。
本文标签: