Pau*_*sey 13 c# post curl httpwebrequest jazz
IBM RTC RESTful api提供了一个用于对服务器进行身份验证的shell脚本示例:
COOKIES=./cookies.txt
USER=my_user
PASSWORD=my_password
HOST="https://myJazzServer:9092/jazz"
curl -k -c $COOKIES "$HOST/authenticated/identity"
curl -k -L -b $COOKIES -c $COOKIES -d j_username=$USER -d j_password=$PASSWORD "$HOST/authenticated/j_security_check"
Run Code Online (Sandbox Code Playgroud)
这非常有效,但我需要使用c#对服务器进行身份验证.
到目前为止,我有以下,但它不起作用(返回授权失败页面):
CookieContainer _cookie;
public string _RTC()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://myJazzServer.com:9092/jazz/authenticated/identity");
if (_cookie == null)
{
_cookie = new CookieContainer();
}
string a;
request.CookieContainer = _cookie;
using (var response = request.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
a = sr.ReadToEnd();
}
}
byte[] data = (new ASCIIEncoding()).GetBytes("j_username=myUser&j_password=MyPass");
request = (HttpWebRequest)WebRequest.Create("https://myJazzServer.com:9092/jazz/authenticated/j_security_check");
request.Method = "POST";
request.ContentType = "text/html";
request.ContentLength = data.Length;
request.CookieContainer = _cookie;
Stream reqStream = request.GetRequestStream();
reqStream.Write(data,0,data.Length);
string b;
using (var response = request.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
b = reader.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 22
我建议你尝试以下方法:
public class WebClientEx : WebClient
{
private CookieContainer _cookieContainer = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = _cookieContainer;
}
return request;
}
}
class Program
{
static void Main()
{
using (var client = new WebClientEx())
{
var response1 = client.DownloadString("https://myJazzServer.com:9092/jazz/authenticated/identity");
var data = new NameValueCollection
{
{ "j_username", "myUser" },
{ "j_password", "MyPass" },
};
var response2 = client.UploadValues("https://myJazzServer.com:9092/jazz/authenticated/j_security_check", data);
Console.WriteLine(Encoding.Default.GetString(response2));
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,为简化调试,您可以将其放入app.config中来激活跟踪:
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net.Sockets" tracemode="protocolonly">
<listeners>
<add name="System.Net.Sockets" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log" />
</listeners>
</source>
</sources>
<switches>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这将创建网络活动的详细日志文件,这可能会简化调试.