【发布时间】:2023-09-22 09:01:01
【问题描述】:
我正在开发一个简单的 Windows 窗体程序,它从“文本框”获取用户名和密码,然后在“消息框”中显示我的链接名称。
我想通过使用“HttpWebRequest”或使用任何方法将我的 POST 请求发送到 Linked-in 来完成代码,然后我可以获得响应并找到我的名字以将其显示在“消息框”中。
我熟悉创建“GET”请求,并且我提出了一些“POST”请求,但在这种情况下,我不知道如何使用 POST 请求发送我的“txt_UserName.Text”和“txt_Password”和我怎样才能收到响应。
当我尝试登录时,我尝试使用 Fiddler 从linkedin 捕获 POST 请求(=POST),但是当我看到它们的标头时它捕获了超过 4 个请求,这似乎是一个 GET 请求,这是一个示例:
GET /nhome/?trk= HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
它们都有多个 cookie 值。
这是我的 POST 请求代码:
public void SubmitData()
{
try
{
string postData = "This is a test that posts this string to a Web server.";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create("http://www.linkedin.com");
// Set the Method property of the request to POST.
request.Method = "POST";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
//Content Length
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader sr = new StreamReader(dataStream);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
dataStream.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
现在我唯一想知道的是,我如何将我的用户名和密码作为值发送到登录链接?
编辑:
下面是我的第二次尝试,没关系,我现在可以在 postData 中发送用户和密码,我可以存储 Cookie 并检索它。但有两个问题: 1-我怎样才能确保登录完成并且没有失败 2-如果登录完成,我想知道从个人资料中获取我的名字的第二步是什么,是提出了另一个请求还是什么?
private void button1_Click(object sender, EventArgs e)
{
PostMessage();
}
private void PostMessage()
{
try {
// POST Data and the POST uri
string postData = "isJsEnabled=true&source_app=&session_key=" + textBox1.Text + "&session_password=" + textBox2.Text + "&signin=Sign+In&session_redirect=";
string uri = "https://www.linkedin.com/uas/login-submit";
// Encoding the POST Data
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Create the POST Request
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(uri);
//POST Parameters (Method and etc.)
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = byteArray.Length;
// Set the POST Request Cookies
var cookieContainer = new CookieContainer();
WebReq.CookieContainer = cookieContainer;
// Get the request stream.
Stream dataStream = WebReq.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
HttpWebResponse response = (HttpWebResponse)WebReq.GetResponse();
dataStream = response.GetResponseStream();
StreamReader sr = new StreamReader(dataStream);
//MessageBox.Show(sr.ReadToEnd());
sr.Close();
dataStream.Close();
if (response.StatusCode != HttpStatusCode.OK)
{
MessageBox.Show(" Error: " + response.StatusDescription);
response.Close();
}
foreach (Cookie cook in response.Cookies)
{
MessageBox.Show(cook.Name + " " + cook.Value);
}
}
catch (Exception ex)
{
MessageBox.Show("POST Message Error: " + ex.Message);
}
}
【问题讨论】:
-
您是否阅读了developer.linkedin.com/documents/sign-linkedin 的 LinkedIn 文档?
-
带有链接的登录按钮是一种身份验证机制,最好使用API来获取此人正在寻找的数据