Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式登录instagram_C#_Login_Webrequest - Fatal编程技术网

C# 以编程方式登录instagram

C# 以编程方式登录instagram,c#,login,webrequest,C#,Login,Webrequest,我正在尝试使用web请求登录instagram。我不太明白发生了什么事。获取此信息:远程服务器返回错误:(403)禁止。到目前为止,我所拥有的: public static string csrf; CookieContainer c1 = new CookieContainer(); private void button1_Click(object sender, EventArgs e) { string PostData = String

我正在尝试使用web请求登录instagram。我不太明白发生了什么事。获取此信息:远程服务器返回错误:(403)禁止。到目前为止,我所拥有的:

    public static string csrf;
    CookieContainer c1 = new CookieContainer();

    private void button1_Click(object sender, EventArgs e)
    {
        string PostData = String.Format("csrfmiddlewaretoken={0}&username=ra123&password=ra12345678",getToken());

        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://instagram.com/accounts/login/");
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.KeepAlive = true;
        req.AllowAutoRedirect = true;              
        req.CookieContainer = c1;
        byte[] byteArray = Encoding.ASCII.GetBytes(PostData);
        req.ContentLength = byteArray.Length;
        Stream dataStream = req.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Flush();
        dataStream.Close();

            HttpWebResponse webResp = (HttpWebResponse)req.GetResponse();
            Stream datastream = webResp.GetResponseStream();
            StreamReader reader = new StreamReader(datastream);
            string s = reader.ReadToEnd();
            MessageBox.Show(s);
            if (s.Contains("ra123"))
            {

                MessageBox.Show("Loggedin");

            }
            else
            {
                MessageBox.Show("Not");
            }

    }


    string getToken()
    {
        string p = "<input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"(.*)\"/>";
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://instagram.com/accounts/login/");
        req.Method = "GET";
        req.CookieContainer = c1;

        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream data = resp.GetResponseStream();
        StreamReader sr = new StreamReader(data);
        string src = sr.ReadToEnd();

        Match m = Regex.Match(src, p);
        if (m.Success)
        {
           return (m.Groups[1].Value.ToString());
        }
        return false.ToString();
    }
公共静态字符串csrf;
CookieContainer c1=新CookieContainer();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
string PostData=string.Format(“csrfmiddlewaretoken={0}&username=ra123&password=ra12345678”,getToken());
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“https://instagram.com/accounts/login/");
请求方法=“POST”;
req.ContentType=“应用程序/x-www-form-urlencoded”;
req.KeepAlive=true;
req.AllowAutoRedirect=真;
req.CookieContainer=c1;
byte[]byteArray=Encoding.ASCII.GetBytes(PostData);
req.ContentLength=字节数组长度;
Stream dataStream=req.GetRequestStream();
写入(byteArray,0,byteArray.Length);
dataStream.Flush();
dataStream.Close();
HttpWebResponse webResp=(HttpWebResponse)req.GetResponse();
Stream datastream=webResp.GetResponseStream();
StreamReader=新的StreamReader(数据流);
字符串s=reader.ReadToEnd();
MessageBox.Show(s);
如果(s.包含(“ra123”))
{
MessageBox.Show(“Loggedin”);
}
其他的
{
MessageBox.Show(“Not”);
}
}
字符串getToken()
{
字符串p=“”;
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“https://instagram.com/accounts/login/");
req.Method=“GET”;
req.CookieContainer=c1;
HttpWebResponse resp=(HttpWebResponse)req.GetResponse();
流数据=resp.GetResponseStream();
StreamReader sr=新的StreamReader(数据);
字符串src=sr.ReadToEnd();
匹配m=正则表达式匹配(src,p);
如果(m.成功)
{
返回(m.Groups[1].Value.ToString());
}
返回false.ToString();
}

仅供参考,这不会解决您的问题,但您需要学会使用块将
和其他实现
IDisposable
的对象放入

public static string csrf;
CookieContainer c1 = new CookieContainer();

private void button1_Click(object sender, EventArgs e)
{
    string PostData = String.Format("csrfmiddlewaretoken={0}&username=ra123&password=ra12345678", getToken());

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://instagram.com/accounts/login/");
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    req.KeepAlive = true;
    req.AllowAutoRedirect = true;
    req.CookieContainer = c1;
    byte[] byteArray = Encoding.ASCII.GetBytes(PostData);
    req.ContentLength = byteArray.Length;
    using (Stream dataStream = req.GetRequestStream())
    {
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Flush();
        dataStream.Close();
    }

    string s;
    using (HttpWebResponse webResp = (HttpWebResponse)req.GetResponse())
    {
        using (Stream datastream = webResp.GetResponseStream())
        {
            using (StreamReader reader = new StreamReader(datastream))
            {
                s = reader.ReadToEnd();
            }
        }
    }
    MessageBox.Show(s);
    if (s.Contains("ra123"))
    {

        MessageBox.Show("Loggedin");

    }
    else
    {
        MessageBox.Show("Not");
    }

}

string getToken()
{
    string p = "<input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"(.*)\"/>";
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://instagram.com/accounts/login/");
    req.Method = "GET";
    req.CookieContainer = c1;

    string src;
    using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
    {
        using (Stream data = resp.GetResponseStream())
        {
            using (StreamReader sr = new StreamReader(data))
            {
                src = sr.ReadToEnd();
            }
        }
    }

    Match m = Regex.Match(src, p);
    if (m.Success)
    {
        return (m.Groups[1].Value.ToString());
    }
    return false.ToString();
}
公共静态字符串csrf;
CookieContainer c1=新CookieContainer();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
string PostData=string.Format(“csrfmiddlewaretoken={0}&username=ra123&password=ra12345678”,getToken());
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“https://instagram.com/accounts/login/");
请求方法=“POST”;
req.ContentType=“应用程序/x-www-form-urlencoded”;
req.KeepAlive=true;
req.AllowAutoRedirect=真;
req.CookieContainer=c1;
byte[]byteArray=Encoding.ASCII.GetBytes(PostData);
req.ContentLength=字节数组长度;
使用(Stream dataStream=req.GetRequestStream())
{
写入(byteArray,0,byteArray.Length);
dataStream.Flush();
dataStream.Close();
}
字符串s;
使用(HttpWebResponse webResp=(HttpWebResponse)req.GetResponse())
{
使用(Stream datastream=webResp.GetResponseStream())
{
使用(StreamReader=新StreamReader(数据流))
{
s=reader.ReadToEnd();
}
}
}
MessageBox.Show(s);
如果(s.包含(“ra123”))
{
MessageBox.Show(“Loggedin”);
}
其他的
{
MessageBox.Show(“Not”);
}
}
字符串getToken()
{
字符串p=“”;
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“https://instagram.com/accounts/login/");
req.Method=“GET”;
req.CookieContainer=c1;
字符串src;
使用(HttpWebResponse resp=(HttpWebResponse)req.GetResponse())
{
使用(Stream data=resp.GetResponseStream())
{
使用(StreamReader sr=新的StreamReader(数据))
{
src=sr.ReadToEnd();
}
}
}
匹配m=正则表达式匹配(src,p);
如果(m.成功)
{
返回(m.Groups[1].Value.ToString());
}
返回false.ToString();
}

登录的问题是,请求需要在标题处设置cookie,而容器没有设置cookie,因为当您从未知资源管理器访问时,每次登录都会更改cookie。以下是您可以做的:

WebResponse Response; 
HttpWebRequest Request;
Uri url = new Uri("http://thewebpage.com:port/login/");

CookieContainer cookieContainer = new CookieContainer();

Request = (HttpWebRequest)WebRequest.Create(url);
Request.Method = "GET";
Request.CookieContainer = cookieContainer;

// Get the first response to obtain the cookie where you will find the "csrfmiddlewaretoken" value
Response = Request.GetResponse(); 

string Parametros = "csrfmiddlewaretoken=" + cookieContainer.GetCookies(url)["csrftoken"].Value + "&username=USER&password=PASSWORD&next="; // This whill set the correct url to access

Request = (HttpWebRequest)WebRequest.Create(url); // it is important to use the same url used for the first request
Request.Method = "POST";
Request.ContentType = "application/x-www-form-urlencoded";
Request.UserAgent = "Other";
// Place the cookie container to obtain the new cookies for further access
Request.CookieContainer = cookieContainer;
Request.Headers.Add("Cookie",Response.Headers.Get("Set-Cookie")); // This is the most important step, you have to place the cookies at the header (without this line you will get the 403 Forbidden exception                                                   

byte[] byteArray = Encoding.UTF8.GetBytes(Parametros);
Request.ContentLength = byteArray.Length;

Stream dataStream = Request.GetRequestStream();
dataStream.Responseite(byteArray, 0, byteArray.Length);
dataStream.Close();

Response = Request.GetResponse();

这对我有什么帮助?我是说“使用”积木有什么好处。另外,我真的很感激这一点,但我现在只需要解决我的问题:(@JohnSaunders)这不是一个答案吗?它使它成为一个大的、格式化的、标记为CW的注释。接下来会发生什么并不取决于我。