使用VB.NET将JSON发布到PHP
我正在尝试使用VB.NET将一些数据发布到PHP。 下面显示的PHP脚本只是两行实验代码使用VB.NET将JSON发布到PHP,php,vb.net,post,Php,Vb.net,Post,我正在尝试使用VB.NET将一些数据发布到PHP。 下面显示的PHP脚本只是两行实验代码 $arr = array('code' => '110', 'description' => $_POST['updateDate']); echo json_encode($arr); 在VB中,我尝试使用WebClient、HttpClient和HttpWebRequest发布。 只有WebClient按预期工作。另外两个返回未定义的索引:updateDate,这意味着POST不正确。下面
$arr = array('code' => '110', 'description' => $_POST['updateDate']);
echo json_encode($arr);
在VB中,我尝试使用WebClient、HttpClient和HttpWebRequest发布。
只有WebClient按预期工作。另外两个返回未定义的索引:updateDate,这意味着POST不正确。下面是VB代码
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Web.Script.Serialization
Imports System.Collections.Generic
Imports System.Collections.Specialized
Imports System.Net.Http
Imports System.Threading.Tasks
Imports System.Windows.Forms
Public Class frmMain
Dim hclient As HttpClient = New HttpClient
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim byteArray() As Byte
Dim dataStream As Stream
Dim reader As StreamReader
Dim sresponse As String
Dim serializer As New JavaScriptSerializer()
Dim responseBytes As Byte()
Dim client As New WebClient
Dim postData As New NameValueCollection
postData.Add("updateDate", "17-02-2020")
responseBytes = client.UploadValues("http://localhost/srvMoveTimesARGUS/srvMoveTimesARGUS.php", postData)
sresponse = Encoding.UTF8.GetString(responseBytes)
Dim updateData As New List(Of field) From {
New field With {.fieldValue = "17-02-2020", .fieldName = "updateDate"}
}
Dim arrayJson As String
arrayJson = serializer.Serialize(updateData)
'---------------------------------------------------------
'With hclient
' .BaseAddress = New Uri("http://localhost/srvMoveTimesARGUS/srvMoveTimesARGUS.php")
' .DefaultRequestHeaders.Accept.Clear()
' .DefaultRequestHeaders.Accept.Add(New Headers.MediaTypeWithQualityHeaderValue("application/json"))
'End With
'PostAsync(arrayJson)
'---------------------------------------------------------
'---------------------------------------------------------
'byteArray = Encoding.UTF8.GetBytes(arrayJson)
'request = HttpWebRequest.Create("http://localhost/srvMoveTimesARGUS/srvMoveTimesARGUS.php")
'request.Method = "POST"
'request.ContentType = "application/json"
''request.Accept = "application/json"
'request.ContentLength = byteArray.Length
''request.Expect = "application/json"
'dataStream = request.GetRequestStream
'dataStream.Write(byteArray, 0, byteArray.Length)
'dataStream.Close()
'response = request.GetResponse
'dataStream = response.GetResponseStream()
'reader = New StreamReader(dataStream)
'sresponse = reader.ReadToEnd
'reader.Close()
'dataStream.Close()
'response.Close()
'---------------------------------------------------------
End Sub
Private Async Function PostAsync(ByVal jsonString As String) As Task
Dim content As New Net.Http.StringContent(jsonString, System.Text.Encoding.UTF8, "application/json")
Dim response As Net.Http.HttpResponseMessage = Await hclient.PostAsync("", content)
Dim result As String = Await response.Content.ReadAsStringAsync()
MessageBox.Show(result)
End Function
End Class
Public Class field
Public Property fieldName As String
Public Property fieldValue As String
End Class
保存序列化字符串的变量arrayJson接受该值
"[{""fieldName"":""updateDate"",""fieldValue"":""17-02-2020""}]"
在请求中使用application/x-www-form-urlencoded或multipart/form数据作为HTTP内容类型时,通过HTTP POST方法传递到当前脚本的变量的关联数组
如果您想访问原始请求主体,它将在流中php://input 只需通过以下方式即可访问:
$json_string = file_get_contents('php://input');
这就成功了。但是使用HttpClient和HttpWebRequest,我将头设置为application/json,那么为什么我发送的数据没有显示在_POST中呢?因为json不是PHP关心的两种内容类型之一。