C#登录到非交互式网站并通过URL传递XML
好吧,这就是我所拥有的,我可能完全错了,但我需要比我在网上找到的更多的方向 我试图传递一个包含登录信息的URL,然后在同一连接中传递另一个包含我的XML的URL。仅此而已,我似乎无法让它发挥作用。请帮忙 这是我的密码C#登录到非交互式网站并通过URL传递XML,c#,asp.net,xml,webrequest,C#,Asp.net,Xml,Webrequest,好吧,这就是我所拥有的,我可能完全错了,但我需要比我在网上找到的更多的方向 我试图传递一个包含登录信息的URL,然后在同一连接中传递另一个包含我的XML的URL。仅此而已,我似乎无法让它发挥作用。请帮忙 这是我的密码 using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Xml; using System.Net; using System.IO; usi
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Xml;
using System.Net;
using System.IO;
using System.Configuration;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data;
using System.ComponentModel;
using System.Collections.Specialized;
namespace DataIntegration.DataSender
{
class RaveDataSender
{
static void Main(string[] args)
{
System.Uri myUri = new System.Uri(@"https://api.myloginpage.com/edc_studyservices.jsp?action=importfile&filecontents=<?xml version='1.0'?><dataprocessitems><item>someitem</item></dataprocessitems>&filename=1.xml");
System.Uri loginUri = new System.Uri(@"https://api.myloginpage.com/login.jsp?studyid=something&action=login&login=myLoginName&password=myPassword");
byte[] mybytes = Encoding.ASCII.GetBytes("https://api.myloginpage.com/edc_studyservices.jsp?action=importfile&filecontents=<?xml version='1.0'?><dataprocessitems><item>someitem</item></dataprocessitems>&filename=1.xml");
byte[] loginbytes = Encoding.ASCII.GetBytes(@"https://api.myloginpage.com/login.jsp?studyid=something&action=login&login=myLoginName&password=myPassword");
CookieAwareWebClient client = new CookieAwareWebClient();
client.UploadDataAsync(loginUri, loginbytes);
client.UploadDataAsync(myUri, mybytes);
client.Dispose();
}
public class CookieAwareWebClient : WebClient
{
private CookieContainer cookie = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = cookie;
}
return request;
}
}
}
}
我认为问题可能是您在异步方法仍在运行时处理了对象。所以这里的次要问题是,您是否以明文形式传递用户名和密码。。?哇,我不会那样做。。如果您有一个具有登录页面的web应用程序,请在验证后从那里处理重定向。不要将此类信息存储在URL中。感谢您注意到这一点。显然,这里的值不是真实的。幸运的是,这是给出的规范,以及我被指示如何处理此集成。但是,是的,你在这里向唱诗班布道。哇,这不是一个好办法。。也许他们不知道这样做会使自己暴露在…
client.Dispose()
-不要这样做。。。直到你的上传完成。。。重写事件处理程序UploadDataCompleted,如果确实需要,在那里处置客户端。否则,在你真的、真的完成之前,你只需抓住那个家伙(处置可能会很昂贵,LOL)好吧,所以我将client.UploadDataAsync改为client.UploadData,这就解决了问题。我还发现,实际的客户没有给我的帐户写访问权限,所以它可能以前工作过,我永远也不会知道。谢谢你的帮助。如果你把答案贴出来,我可以把它标记为正确的。
using (var client = new CookieAwareWebClient())
{
byte[] authresp = client.UploadData(loginUri, loginbytes);
byte[] dataRespose = client.UploadData(xmlUri, reqbytes);
string authResult = System.Text.Encoding.UTF8.GetString(authresp);
string result = System.Text.Encoding.UTF8.GetString(dataRespose);
client.Dispose();
}