C#登录AlbumMemention.com

C#登录AlbumMemention.com,c#,html,C#,Html,我正在尝试使用webrequest访问并登录AlbumRemembers.com,但我找不到合适的表单发布格式。我以前已经使用过这个过程,每次使用“&password=somthing&email”=somth@somth.com“对我有用,但在这件事上不行 我已经使用HttpWatch尝试发现数据是如何发送的,但没有帮助 表格如下: <form name="login" action="/login/" method="post" enctype="multipart/form-data

我正在尝试使用webrequest访问并登录AlbumRemembers.com,但我找不到合适的表单发布格式。我以前已经使用过这个过程,每次使用“&password=somthing&email”=somth@somth.com“对我有用,但在这件事上不行

我已经使用HttpWatch尝试发现数据是如何发送的,但没有帮助

表格如下:

<form name="login" action="/login/" method="post" enctype="multipart/form-data"> 
    <input type="hidden" name="send" value="1" /> 
<p><label for="form_email">Your email address</label><input type="text" id="form_email" name="email" maxlength="320" /></p> 
<p><label for="form_password">Your password</label><input type="password" id="form_password" name="password" maxlength="32" /></p> 
<p><input class="checkbox" type="checkbox" id="form_keep_login" name="keep_login" value="keep" /> 
<label for="form_keep_login" class="checkbox_label">Keep me signed in. Uncheck if this is a shared computer.</label></p> 

<p><input type="submit" value="Sign in" class="submit" /></p> 

感谢您的帮助。

您是否尝试使用
WebRequest.Credentials
属性而不是将凭据放入查询字符串中?

为什么它不起作用

在表单标记中,我们可以看到

enctype="multipart/form-data"
这意味着以正常方式发布

string.Format("send=1&email=EMAIL&password=PASS");
不会为你工作的

解决方案

你需要做两件事

  • 设置正确的内容类型标题
  • 您的内容类型最终应为

    Content-Type: multipart/form-data; boundary=---------------------------7db433550e64
    
    这里我们要说的是,表单数据分为多个部分,每个部分用边界分隔

    ---------------------------7db433550e64
    
    无需设置内容长度,最后我们需要发送“-”,服务器将理解我们已经完成了数据发送

  • 发送正确的帖子内容
  • 在post中,请确保post数据如下所示,而不是用“&”分隔的参数

    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="send"
    
    1
    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="email"
    
    test@test.com
    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="password"
    
    testpass
    -----------------------------7db2c2d550e64--
    
    因此,您可能只想通过放置一些占位符来参数化这个字符串,如{0},{1}。。。然后使用string.format将它们替换为实际值

    这将解决您的问题

    还有两个提示,不要将post数据的编码更改为UTF-8,除非您确定它包含一些UTF-8字符。你可以使用CookieContainer,而不是自己管理cookies


    希望它有帮助……

    你说使用HttpWatch没有帮助。。。以什么方式?结果如何?我希望我能在@Zannjaminderson的帖子中添加评论,但我的声誉太低:),总之WebRequest。凭据实现了ICredential接口,它只支持摘要、协商、Kerberos、NTLM和基本身份验证方案,不支持自定义/表单身份验证,因此在这里可能不起作用。。。
    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="send"
    
    1
    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="email"
    
    test@test.com
    -----------------------------7db2c2d550e64
    Content-Disposition: form-data; name="password"
    
    testpass
    -----------------------------7db2c2d550e64--