【发布时间】:2010-05-03 18:53:52
【问题描述】:
我一直在尝试从 Google 将数据发布到网络服务器的几件事,但它们都不起作用:考虑到第二个变量是 SQL 查询,我仍然坚持如何将变量转换为请求所以它有空格。
有人知道使用WebClient POST 数据的正确方法吗?我宁愿使用WebClient,因为它比HttpWebRequest/HttpWebResponse需要更少的代码。
到目前为止,这是我尝试过的:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim wc = New WebClient()
''#convert data
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
Dim postData = String.Format("db={0}&query={1}", _
HttpUtility.UrlEncode("books.sqlite"), _
HttpUtility.UrlEncode("SELECT id,title FROM boooks"))
''#Dim bytArguments As Byte() = Encoding.ASCII.GetBytes("db=books.sqlite|query=SELECT * FROM books")
''#POST query
Dim bytRetData As Byte() = wc.UploadData("http://localhost:9999/get", "POST", postData)
RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData)
Exit Sub
Dim client = New WebClient()
Dim nv As New Collection
nv.Add("db", "books.sqlite")
nv.Add("query", "SELECT id,title FROM books")
Dim address As New Uri("http://localhost:9999/get")
''#Dim bytRetData As Byte() = client.UploadValues(address, "POST", nv)
RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData)
Exit Sub
''#Dim wc As New WebClient()
''#convert data
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
Dim bytArguments As Byte() = Encoding.ASCII.GetBytes("db=books.sqlite|query=SELECT * FROM books")
''#POST query
''#Dim bytRetData As Byte() = wc.UploadData("http://localhost:9999/get", "POST", bytArguments)
RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData)
Exit Sub
End Sub
谢谢。
编辑:感谢大家的反馈。
对于那些有同样问题的人,这里有一些工作代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim baseURL As String = "localhost:9999"
Dim strURL As String = "http://" & baseURL & "/get"
Dim client As New WebClient()
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
client.Headers.Add("Accept-Encoding", "text/plain")
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Iron/4.0.280.0 Chrome/4.0.280.0 Safari/532.9")
'BAD client.Headers.Add("Host", baseURL)
'BAD client.Headers.Add("Host", "localhost")
'Convert in parameters in case contain spaces, accents, etc.
Dim postData As String = String.Format("db={0}&query={1}", _
HttpUtility.UrlEncode("books.sqlite"), _
HttpUtility.UrlEncode("SELECT id,title FROM books"))
RichTextBox1.Text = client.UploadString(New Uri(strURL), "POST", postData)
End Sub
【问题讨论】:
-
我几乎不敢问,但您真的要执行从系统外部发送给您的 SQL 查询吗?
-
这与 POST 没有太大关系,但似乎使用 .NET 的 SQLite 库(例如 sqlite.phxsoftware.com)可以更轻松地完成您所做的事情。
-
服务器将永远无法从网络访问,并将位于防火墙后面的 LAN 上。我将研究如何从参数构建查询,而不是让客户端发送完整的查询。我还没有找到 SQLite 服务器,所以需要自己构建。