Размещение в phpBB Board с помощью приложения на C # - PullRequest
1 голос
/ 18 ноября 2009

Я собираюсь улучшить один из моих новых проектов, и одна из функций, которые я хочу добавить, - это возможность опубликовать новую ветку на форуме phpBB, но возможно ли это сделать? Если это так, как я могу это сделать? Спасибо.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009
  1. Вы можете сделать это с помощью простого оператора вставки в базу данных phpBB, однако, чтобы все прошло гладко, вам нужно убедиться, что вы также вставляете любые другие строки, которые phpBB вставил бы для новый поток (ищите документацию / исходный код для этого).

    Кроме того, вам необходимо убедиться, что вы ввели правильные идентификаторы для уникальных идентификаторов, необходимых для вставки (например, UserID для пользователя, создающего тему)

  2. Другой метод заключается в создании отдельного php-файла, который предоставляет функцию создания потока (с / ее можно вызывать), которую phpBB использует для создания нового потока. Вы разрешите POST / GET (POST более безопасен) для php-файла, а затем запустите HTTP-запрос POST / GET из C #.

    В вашем новом php-файле потребуется авторизация определенного типа, чтобы никто другой не публиковал / не запрашивал страницу. Вы можете жестко закодировать определенное имя поля, которое должно содержать определенный ключ доступа, так что любые входящие сообщения / сообщения, которые его не имеют, будут игнорироваться.

Второй метод, imo, лучше, потому что он позволяет phpBB выполнять всю тяжелую работу, вам просто нужно правильно подключить его.

Однако при втором способе у вас могут быть проблемы с безопасностью, а phpBB может даже не разрешать то, что вы пытаетесь сделать. (Я думаю, что для вызова определенных методов, страница должна иметь DEFINE ("IN", "PHPBB") или что-то в этом роде, что накладывает больше ограничений на то, что вы можете сделать.

Для начала я бы посмотрел сайты поддержки phpBB и выяснил, возможна ли вторая часть, и выяснил, можно ли легко вызвать вызов функций.

1 голос
/ 19 августа 2012

Ну, войдите в phpBB3 - это простая часть кода, который я использовал

  try
            {
                string format= "autologin=1&login=true&username={0}&password={1}";

                byte[] bytes = Encoding.ASCII.GetBytes(string.Format(format, (object)HttpUtility.UrlEncode("USERNAME"), (object)HttpUtility.UrlEncode("PASSWORD")));

              HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://thephpbb3domain/ucp.php?mode=login");
                httpWebRequest.CookieContainer = new CookieContainer(128);
                httpWebRequest.Timeout = 10000;
                                    httpWebRequest.AllowAutoRedirect = false;
                httpWebRequest.UserAgent = Resources.WEB_USER_AGENT;
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                httpWebRequest.ContentLength = (long)bytes.Length;
                Stream requestStream = ((WebRequest)httpWebRequest).GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                if (httpWebResponse == null)
                {
                    int num2 = (int)MessageBox.Show(Resources.ERR_MSG_NO_DATA);
                    return;
                }
                else
                {
                    StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
                    streamReader.ReadToEnd().Trim();
                    streamReader.Close();

                            IEnumerator enumerator2 = httpWebResponse.Cookies.GetEnumerator();
                            try
                            {
                                while (enumerator2.MoveNext())
                                {
                                    Cookie cookie = (Cookie)enumerator2.Current;
                                    string str = HttpUtility.UrlDecode(cookie.Value);
                                    if (cookie.Name.EndsWith("_k"))
                                    {
                                        if (cookie.Value.Length > 5)
                                        {

                                            break;
                                        }
                                    }
                                    else if (cookie.Name.EndsWith("_data") && !str.Contains("s:6:\"userid\";i:-1;") && str.Contains("s:6:\"userid\";"))
                                    {


                                    }
                                }

                            }
                            finally
                            {
                                IDisposable disposable = enumerator2 as IDisposable;
                                if (disposable != null)
                                    disposable.Dispose();
                            }


                }
            }
            catch (WebException ex)
            {
                int num = (int)MessageBox.Show(ex.Message, "HTTP Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }

При этом использовались следующие основные пространства имен

       System.Net
       System.Web

Тем не менее, создание темы на форуме стало большой проблемой для всех, у кого есть подсказки?

1 голос
/ 18 ноября 2009

Я не напишу весь код для вас, но я могу выкинуть пару вещей, которые я построил, которые работают хорошо.

Один из способов - создать элемент управления веб-браузера и создать что-то вроде этого:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlDocument doc = null;
            doc = webBrowser1.Document;

            //Find login text box and write user name  
            HtmlElement login = doc.GetElementById("username_or_email");
            login.InnerText = this.login;

            //Find password text box and write password
            HtmlElement password = doc.GetElementById("session[password]");
            password.InnerText = this.password;

            // go to the submit button
            webBrowser1.Document.GetElementsByTagName("input")[5].Focus();
            SendKeys.Send("{ENTER}");

        }

Другой способ - использовать http-запросы (не так надежно для надежной работы с phpBB)

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(twitterUrl + userID + ".xml");
                string Credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(this.login + ":" + this.password));

                request.Method = "POST";
                request.ContentType = "application/xml";
                request.AllowWriteStreamBuffering = true;
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727;";
                request.Headers.Add("Authorization", "Basic " + Credentials);

                HttpWebResponse HttpWResp = (HttpWebResponse)request.GetResponse();

                string response = HttpWResp.StatusCode.ToString();
                    HttpWResp.InitializeLifetimeService();
                    HttpWResp.Close();    

                return response;

Код выше используется для входа в твиттер. Вы можете изменить любой из них по своему вкусу. Помните, что phpBB, скорее всего, будет использовать проверку кода и сеанса для предотвращения именно того, что вы пытаетесь сделать.

...