» »

C# in internetna stran

C# in internetna stran

cikopero ::

Živijo,

delam aplikacijo, ki bi komunicirala z internetno stranjo COBISS. Do sedaj sem prišel do naslednjega:

Našel sem primer, kako upravljati s spletno stranjo:
        public class PostSubmitter
        {
            /// <summary>
            /// determines what type of post to perform.
            /// </summary>
            public enum PostTypeEnum
            {
                /// <summary>
                /// Does a get against the source.
                /// </summary>
                Get,
                /// <summary>
                /// Does a post against the source.
                /// </summary>
                Post
            }

            private string m_url=string.Empty;
            private NameValueCollection m_values=new NameValueCollection();
            private PostTypeEnum m_type=PostTypeEnum.Get;
            /// <summary>
            /// Default constructor.
            /// </summary>
            public PostSubmitter()
            {
            }

            /// <summary>
            /// Constructor that accepts a url as a parameter
            /// </summary>
            /// <param name="url">The url where the post will be submitted to.</param>
            public PostSubmitter(string url):this()
            {
                m_url=url;
            }

            /// <summary>
            /// Constructor allowing the setting of the url and items to post.
            /// </summary>
            /// <param name="url">the url for the post.</param>
            /// <param name="values">The values for the post.</param>
            public PostSubmitter(string url, NameValueCollection values):this(url)
            {
                m_values=values;
            }

            /// <summary>
            /// Gets or sets the url to submit the post to.
            /// </summary>
            public string Url
            {
                get
                {
                    return m_url;
                }
                set
                {
                    m_url=value;
                }
            }
            /// <summary>
            /// Gets or sets the name value collection of items to post.
            /// </summary>
            public NameValueCollection PostItems
            {
                get
                {
                    return m_values;
                }
                set
                {
                    m_values=value;
                }
            }
            /// <summary>
            /// Gets or sets the type of action to perform against the url.
            /// </summary>
            public PostTypeEnum Type
            {
                get
                {
                    return m_type;
                }
                set
                {
                    m_type=value;
                }
            }
            /// <summary>
            /// Posts the supplied data to specified url.
            /// </summary>
            /// <returns>a string containing the result of the post.</returns>
            public string Post()
            {
                StringBuilder parameters=new StringBuilder();
                for (int i=0;i < m_values.Count;i++)
                {
                    EncodeAndAddItem(ref parameters,m_values.GetKey(i),m_values[i]);
                }
                string result=PostData(m_url,parameters.ToString());
                return result;
            }
            /// <summary>
            /// Posts the supplied data to specified url.
            /// </summary>
            /// <param name="url">The url to post to.</param>
            /// <returns>a string containing the result of the post.</returns>
            public string Post(string url)
            {
                m_url=url;
                return this.Post();
            }
            /// <summary>
            /// Posts the supplied data to specified url.
            /// </summary>
            /// <param name="url">The url to post to.</param>
            /// <param name="values">The values to post.</param>
            /// <returns>a string containing the result of the post.</returns>
            public string Post(string url, NameValueCollection values)
            {
                m_values=values;
                return this.Post(url);
            }
            /// <summary>
            /// Posts data to a specified url. Note that this assumes that you have already url encoded the post data.
            /// </summary>
            /// <param name="postData">The data to post.</param>
            /// <param name="url">the url to post to.</param>
            /// <returns>Returns the result of the post.</returns>
            private string PostData(string url, string postData)
            {
                HttpWebRequest request=null;
                if (m_type==PostTypeEnum.Post)
                {
                    Uri uri = new Uri(url);
                    request = (HttpWebRequest) WebRequest.Create(uri);
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    //request.ContentType = "text/html; charset=utf-8";
                    request.ContentLength = postData.Length;
                    using(Stream writeStream = request.GetRequestStream())
                    {
                        UTF8Encoding encoding = new UTF8Encoding();
                        byte[] bytes = encoding.GetBytes(postData);
                        writeStream.Write(bytes, 0, bytes.Length);
                    }
                }
                else
                {
                    Uri uri = new Uri(url + "?" + postData);
                    request = (HttpWebRequest) WebRequest.Create(uri);
                    request.Method = "GET";
                }
                string result=string.Empty;
                using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8))
                        {
                            result = readStream.ReadToEnd();
                        }
                    }
                }
                return result;
            }
            /// <summary>
            /// Encodes an item and ads it to the string.
            /// </summary>
            /// <param name="baseRequest">The previously encoded data.</param>
            /// <param name="dataItem">The data to encode.</param>
            /// <returns>A string containing the old data and the previously encoded data.</returns>
            private void EncodeAndAddItem(ref StringBuilder baseRequest, string key, string dataItem)
            {
                if (baseRequest==null)
                {
                    baseRequest=new StringBuilder();
                }
                if (baseRequest.Length!=0)
                {
                    baseRequest.Append("&");
                }
                baseRequest.Append(key);
                baseRequest.Append("=");
                baseRequest.Append(HttpUtility.UrlEncode(dataItem));
            }
            
        }



Sam sem uporabljal:
            PostSubmitter post = new PostSubmitter();
            //post.Url = "http://cobiss.izum.si/scripts/cobiss?ukaz=GETID&lani=en";
            post.Url = "http://cobiss.izum.si/scripts/cobiss?ukaz=GETID&lani=si";
            
            post.Type = PostSubmitter.PostTypeEnum.Get;
            result = post.Post();

            //dobimo ID seje
            int iIndex = result.IndexOf("http://cobiss4.izum.si/scripts/cobiss?id=");
            string newUrl = null;
            if (iIndex != -1)
            {
                for (int i = 0; i < result.Length; i++)
                {
                    if (result[i + iIndex] == '\"')
                        break;

                    newUrl += result[i + iIndex];
                }
            }
            else
            {
                iIndex = result.IndexOf("http://cobiss2.izum.si/scripts/cobiss?id=");
                
                if (iIndex != -1)
                {
                    for (int i = 0; i < result.Length; i++)
                    {
                        if (result[i + iIndex] == '\"')
                            break;

                        newUrl += result[i + iIndex];
                    }
                }

            }
            //to je naslov, na katerega kaže gumb za iskanje knjižnice
            result = newUrl;

            if (newUrl != null)
            {
                post.Url = newUrl;
                //poiskali bomo knjiznice, ki ima v imenu FE
                post.PostItems.Add("bstr", "FE");
                post.Type = PostSubmitter.PostTypeEnum.Post;
                result = post.Post();
            }


            //DobljeniString.Text = result;


Težava je, ker je posebej vodena posamezna seja - različni link. V kodi strani najdem link, kamor kaže gumb za iskanje.

Ko uporabim povezavo, na katerega kaže gumb iskanje, mi sporoči, da je potrebno narediti novo sejo - zadnji result.

Morda kaka ideja, kako se lotiti problema. Sam imam le malo izkušenj s spletnimi stranmi, ravno tako šele dobro spoznavam C#.

Hvala za ideje,

Lep pozdrav Peter

c00L3r ::

Ti morda to kaj pomaga? Sam se mislim v prihodnosti lotit enega podobnega projekta. Moral bom prebrat podatke iz določene spletne strani, kjer moram bit login-an. Sporoči kako je šlo.

cikopero ::

c00L3r je izjavil:

Ti morda to kaj pomaga? Sam se mislim v prihodnosti lotit enega podobnega projekta. Moral bom prebrat podatke iz določene spletne strani, kjer moram bit login-an. Sporoči kako je šlo.


Hvala za nasvet,

Na hitro sem pogledal, vendar brez uspeha. Se bom še malo bolj poglobil v tej smeri. Če mi uspe, sporočim.

Lp,
Peter


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344332625 (72628) Macketina
»

[PHP]Zajem slike iz direktorija

Oddelek: Programiranje
51232 (1149) KernelPanic
»

[C# asp.NET web forma] Kam zgine cookie oz. zkj se izbriše?

Oddelek: Programiranje
61119 (933) Morenov
»

ASP.NET + C# vprašanje

Oddelek: Programiranje
342767 (1781) Morenov
»

C#; WebClient class; problem z uploadanjem

Oddelek: Programiranje
51422 (1381) 64202

Več podobnih tem