Как войти в Wordpress программно?

Да, в 1980; в 2008? зависит

, Когда я начал программировать профессионально преобладание скорости Фортрана, просто бросался вызов. Я помню чтение об этом в докторе Dobbs и сообщение программистам старшего возраста о статье - они смеялись.

, Таким образом, у меня есть два представления об этом, теоретическом и практичном. В теории Фортран сегодня не имеет никакого внутреннего преимущества для C/C++ или даже любого языка, который позволяет ассемблерный код. На практике Фортран сегодня все еще пользуется преимуществами наследия истории и культуры, созданной вокруг оптимизации цифрового кода.

Вплоть до и включая Фортран 77, конструктивные соображения языка имели оптимизацию как основной фокус. Из-за состояния теории компилятора и технологии, это часто означало ограничение функции и возможность, чтобы дать компилятору лучший выстрел в оптимизацию кода. Хорошая аналогия должна думать о Фортране 77 как профессиональный гоночный автомобиль, который жертвует функциями скорости. В эти дни компиляторы поправились через все языки, и функции производительности программиста более оценены. Однако существуют все еще места, где люди главным образом обеспокоены скоростью в научных вычислениях; эти люди, скорее всего, наследовали код, обучение и культуру от людей, которые самих были программистами Fortran.

, Когда каждый начинает говорить об оптимизации кода, существует много проблем, и лучший способ получить ощущение этого для скрываний, где люди - то, чье задание это должно иметь быстрый цифровой код . Но имейте в виду, что такой критически чувствительный код обычно является небольшой частью полных строк кода и очень специализированный: Много кода Фортрана так же "неэффективно" как много другого кода на других языках и , оптимизация даже не должна быть первоочередной задачей такого кода .

А замечательным местом для запуска в приобретении знаний об истории и культуре Фортрана является Википедия. статья в Википедии Фортрана превосходна, и я очень ценю тех, кто не торопился и усилие сделать ее из значения для сообщества Фортрана.

(Сокращенная версия этого ответа была бы комментарием в превосходном потоке, запущенном [1 114] Nils, но у меня нет кармы, чтобы сделать это. На самом деле я, вероятно, не записал бы ничего вообще, но для которого этот поток имеет фактическое информационное содержание и совместное использование в противоположность войнам пламени и фанатизму языка, который является моим основным опытом с этим предметом. Я был поражен и должен был совместно использовать любовь.)

7
задан T-Rex 15 August 2009 в 19:17
поделиться

5 ответов

Всем спасибо. Удалось как заставить работать только при использовании сокетов. Wordpress отправляет несколько заголовков Set-Cookie , но HttpWebRequest обрабатывает только один экземпляр такого заголовка, поэтому некоторые файлы cookie теряются. При использовании сокетов я могу получить все необходимые файлы cookie и войти в панель администратора.

3
ответ дан 6 December 2019 в 08:16
поделиться

Я не вижу очевидных проблем с вашим кодом, извините. Но Wordpress имеет интерфейс XML-RPC, который необходимо включить в интерфейсе администратора. Я написал несколько скриптов на Python для этого интерфейса, и он отлично сработал.

1
ответ дан 6 December 2019 в 08:16
поделиться

Я пробовал это со своей учетной записью WordPress.com (защищенной с помощью SSL). Я обнаружил, что самый простой способ - использовать сокеты .NET для получения заголовков HTTP «Set-Cookie», затем проанализировать заголовки для объектов .NET Cookie и затем использовать CookieContainer с файлами cookie для HttpWebRequest.

Самый простой способ работать с SSL через сокеты - реализовать SslStream через NetworkStream, привязанный к сокету.

Пример:

private void LogIn()
    {
        string fulladdress = "hostname.wordpress.com";
        string username = HttpUtility.UrlEncode("username");
        string password = HttpUtility.UrlEncode("password");

        string formdata = "log={0}&pwd={1}&redirect_to=http%3A%2F%2F{2}%2Fwp-admin%2F&testcookie=1";
        formdata = string.Format(formdata, username, password, fulladdress);
        IPHostEntry entry = Dns.GetHostEntry(fulladdress);


        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        s.Connect(entry.AddressList[0], 443);

        NetworkStream ns = new NetworkStream(s);

        System.Net.Security.SslStream ssl = new System.Net.Security.SslStream(ns);
        byte[] data = Encoding.UTF8.GetBytes(String.Format(WpfApplication2.Properties.Resources.LogRequest, "https://" + fulladdress, fulladdress, form.Length, username, password));

        ssl.AuthenticateAsClient(fulladdress);
        ssl.Write(data, 0, data.Length);

        StringBuilder sb = new StringBuilder();
        byte[] resp = new byte[128];
        int i = 0;
        while (ssl.Read(resp, 0, 128) > 0)
        {
            sb.Append(Encoding.UTF8.GetString(resp));
        }

        List<String> CookieHeaders = new List<string>();
        foreach (string header in sb.ToString().Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
        {
            if (header.StartsWith("Set-Cookie"))
            {
                CookieHeaders.Add(header.Replace("Set-Cookie: ", ""));
            }
        }

        CookieContainer jar = new CookieContainer();
        foreach (string cook in CookieHeaders)
        {
            string name, value, path, domain;
            name = value = path = domain = "";

            string[] split = cook.Split(';');
            foreach (string part in split)
            {
                if (part.StartsWith(" path="))
                {
                    path = part.Replace(" path=", "");
                }
                if (part.StartsWith(" domain="))
                {
                    domain = part.Replace(" domain=", "");
                }
                if (!part.StartsWith(" path=") && !part.StartsWith(" domain=") && part.Contains("="))
                {
                    name = part.Split('=')[0];
                    value = part.Split('=')[1];
                }
            }

            jar.Add(new Cookie(name, value, path, domain));
        }

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://" + fulladdress + "/wp-admin/index.php");
        req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3";
        req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        req.KeepAlive = false;
        req.AllowAutoRedirect = false;
        req.Referer = "https://" + fulladdress + "/wp-login.php";
        req.ContentType = "application/x-www-form-urlencoded";
        req.CookieContainer = jar;
        req.AllowAutoRedirect = true;
        req.AutomaticDecompression = DecompressionMethods.GZip;
        req.Method = "GET";
        req.Timeout = 30000;

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();

        using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }

Код не очень эффективен, но он иллюстрирует процесс входа в административный интерфейс.

Надеюсь, это поможет :)

1
ответ дан 6 December 2019 в 08:16
поделиться
NameValueCollection loginData = new NameValueCollection();
loginData.Add("username", "your_username");
loginData.Add("password", "your_password");

WebClient client = new WebClient();
string source = Encoding.UTF8.GetString(client.UploadValues("http://www.site.com/login", loginData));

string cookie = client.ResponseHeaders["Set-Cookie"];
2
ответ дан 6 December 2019 в 08:16
поделиться

Я не знаю, найдут ли другие это полезным, но я просто использовал WordPress API для входа в систему. Я создал пользователя (CRON_USR), который «входит в систему» ​​ночью как часть cron и выполняет некоторые задачи. Код такой:

require(dirname(__FILE__) . '/wp-load.php' );
$user = wp_authenticate(CRON_USR, CRON_PWD);
wp_set_auth_cookie($user->ID, true, $secure_cookie); //$secure_cookie is an empty string
do_action('wp_login', CRON_USR);
wp_redirect('http://www.mysite.com/wp-admin/');
4
ответ дан 6 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: