C#WebRequest获取/发布
所以我想是时候学C了,对我来说,伙计们,我对这很陌生 我正在尝试创建一个非常简单的应用程序(我使用的是Windows窗体应用程序)。 我的目标是:C#WebRequest获取/发布,c#,webrequest,C#,Webrequest,所以我想是时候学C了,对我来说,伙计们,我对这很陌生 我正在尝试创建一个非常简单的应用程序(我使用的是Windows窗体应用程序)。 我的目标是: 使用“GET”方法,获取网页 读取文本字段(该值在用户每次访问页面时都会更改) 使用“POST”方法,相应地发送一些值 以下是我目前的代码: private void button2_Click(object sender, EventArgs e) { string URI = "http://localhost/post.php";
private void button2_Click(object sender, EventArgs e)
{
string URI = "http://localhost/post.php";
string myParameters = "field=value1&field2=value2";
using (WebClient wc = new WebClient())
{
string getpage = wc.DownloadString("http://localhost/post.php");
MessageBox.Show(getpage);
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
MessageBox.Show(HtmlResult);
}
}
到目前为止,一切都很好,但这并不完全是我想要实现的。
我可以使用POST方法,但在发送数据之前如何使用GET?
我想根据得到的结果发送数据
请让我知道,我是否应该给一个更好的描述,我试图做什么
谢谢
编辑这是我的PHP代码:
<?php
$a = session_id();
if(empty($a))
session_start();
echo "Session: ".session_id()."<br/>\n";
使用GET读取数据
请参阅以下答案:
会议
默认情况下,WebClient不使用任何会话。因此,每次呼叫都会像创建新会话一样进行处理。要做到这一点,您需要以下操作:
请参阅以下答案:
示例代码
GET
方法实际上只是通过地址行传递的参数,只需将您的请求发送到string.Format(“{0}{1}”,URI,myParameters)
(或URI+”?“+myParameters
)并简单地读取响应即可。我很久以前就知道了,但是:
byte[] readedData = null;
await Task.Run(async() =>
{
using (WebClient client = new WebClient())
{
client.DownloadProgressChanged += (obj, args) => progessChangedAction?.Invoke(args.ProgressPercentage);
readedData = await client.DownloadDataTaskAsync(requestUri).ConfigureAwait(false);
}
});
return readedData;
}我想他是在问如何使用WebClient类中的GET功能,这样他就可以获取数据,然后根据这些数据撰写一篇文章。我想知道这是否有效……因为它们需要在同一个会话中进行。编辑:Pseudo Coder,这正是我的目标。嗨,伙计们,我仍然无法理解这一点。它仍然算作一个不同的会话。妈ybe最好的比较是我们的浏览器(例如Chrome)。您打开一个页面,然后提交其中的表单。没有刷新或其他任何内容。您是否阅读了我关于会话的第二个链接?您必须正确设置客户端才能使用CookieContainer处理会话。要使用会话,您必须使用cookie。访问url时,会创建会话。会话ID作为cookie提供。Yo您的客户端需要保存此cookie并在下次发送,以便您的会话可以恢复。如果您在“我的第二个链接”中使用客户端,您的请求应与cookie一起工作,从而恢复会话。您是否尝试过?尽管您的第2点有点混乱。阅读页面以获取用户输入的最终目标是什么。如果ser输入数据您的数据库中没有数据吗?我想这取决于您的PHP
脚本。我理解您的问题的方式是,您希望使用GET
和POST
方法组合向页面发送一些数据。如果是这种情况,我不明白为什么不在同一个会话中。但是如果您不想这样做o通过GET
发送内容,然后根据页面的响应,使用POST
创建另一个请求,我相信这将是一个单独的请求。如果会话的含义与浏览器中的会话相同,那么有一种处理方法(cookie等),但如果我不记得了…我编辑了我的主要帖子,如果你能猜出问题出在哪里,请查看
public class CookieAwareWebClient : WebClient
{
private readonly CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.CookieContainer = m_container;
}
return request;
}
}
// ...
private void button2_Click(object sender, EventArgs e)
{
string URI = "http://localhost/post.php";
string myParameters = "field=value1&field2=value2";
using (WebClient wc = new CookieAwareWebClient())
{
string getpage = wc.DownloadString("http://localhost/post.php");
MessageBox.Show(getpage);
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
MessageBox.Show(HtmlResult);
}
}
byte[] readedData = null;
await Task.Run(async() =>
{
using (WebClient client = new WebClient())
{
client.DownloadProgressChanged += (obj, args) => progessChangedAction?.Invoke(args.ProgressPercentage);
readedData = await client.DownloadDataTaskAsync(requestUri).ConfigureAwait(false);
}
});
return readedData;