GVKun编程网logo

如何发出HTTP POST Web请求(如何发送http请求)

6

本文的目的是介绍如何发出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请求)

如何发出HTTP POST Web请求(如何发送http请求)

Canonical
如何使用该 方法 发出HTTP请求并发送一些数据POST

我可以GET提出请求,但是我不知道如何提出POST请求。

答案1

小编典典

有几种执行HTTP GETPOST请求的方法:


方法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:如何发出HTTP HEAD请求?

我想做一个简单的HTTP HEAD请求,没有keep-alive.

我怎么能在Android中做到这一点?

解决方法

使用HttpClient:

正如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发出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请求

c# – 从后面的代码发出http请求

我正在尝试实施 Message API

我不确定我将如何从代码隐藏和它们的代码片段中调用它,它说:

https://platform.3cinteractive.com/api/send_message.PHP 

POST
username=aRDSe3vcaMzh06YrMcxcQw==&password=1BSvQc6lpNlnp4ufWgRLPHNJ7RMrL8CcaWCzL1Vtw+Y=&phone_number=+11234567890&trigger_id=1105&message=howdy

解决方法

使用下面的 WebRequest类或使用像 RestSharp这样的库来获得更多控制或HTTP请求:

// 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 请求的示例

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 请求的示例等相关内容,可以在本站寻找。

本文标签: