Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: speak48 - 02 Nisan 2013, 13:55:50

Başlık: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 13:55:50
gireceğim bir web adresinin var olup olmadığını otamatik kontrol etmek istiyorum.
ama bu kadar basit bir istek bile  nedense bulunmaz oluyor.
c ile bu nasıl yapabilirim.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: SERRO EFE - 02 Nisan 2013, 14:16:24
Ping atınca olmuyormu?
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 14:20:24
pingi sadece kök adresine yani ip numarasına atıyo
ben full adresin var olup olmadığını kontrol etmek istiyorum
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: Gökhan BEKEN - 02 Nisan 2013, 14:37:01
Her sayfada işlemeyebilir ama aklıma şöyle bir yöntem geldi.
Girdiğiniz sayfada birşey yoksa çoğu zaman "böyle bir sayfa yok" tarzı bir yazı gelir.
c++ ta açmak istediğiniz sayfanın html içeriğini sorgulayarak "böyle bir sayfa yok" içeriği var mı yok mu diye kontrol edip anlayabilirsiniz.
Ama bazı siteler yalnış bir sayfaya girmek istediğinizde anasayfaya yönlendirebiliyor ya da kendileri bunu anlayarak "böyle bir döküman yok" tarzında mesajlar verebiliyorlar.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 14:42:26
aklınıza geleni değilde bildiğinizi hatta yaptığınız şeyi söylerseniz daha yardımcı olursunuz.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: OG - 02 Nisan 2013, 14:43:27
http://www.tek-tips.com/viewthread.cfm?qid=1654771 (http://www.tek-tips.com/viewthread.cfm?qid=1654771)
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 14:56:15
bende bu gibi şeyler deniyorum ama bi sonuca ulaşamadım.
basic yerine c olsaydı daha iyi olurdu.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: everygelem - 02 Nisan 2013, 15:57:29
Sunucuya socketle 80 nolu porta bağlanıp, sayfa talebinde bulunmanız yeterli.
GET /index.html HTTP/1.0\r\n
Host: www . xxxxxxx . c o m r\n
\r\n


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>

#define PORT        80
             /* REPLACE with your server machine name*/
#define HOST        "localhost"
#define DIRSIZE     8192

main(argc, argv)
int argc; char **argv;
{
        char hostname[100];
char    dir[DIRSIZE];
int sd;
struct sockaddr_in sin;
struct sockaddr_in pin;
struct hostent *hp;
char   gonder[100] = "GET /index.html HTTP/1.0\r\nHost: www. xxx . comr\n\r\n";
        strcpy(hostname,HOST);
        if (argc>1)
            { strcpy(hostname,argv[1]); }

/* go find out about the desired host machine */
if ((hp = gethostbyname(hostname)) == 0) {
perror("gethostbyname");
exit(1);
}

/* fill in the socket structure with host information */
memset(&pin, 0, sizeof(pin));
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
pin.sin_port = htons(PORT);

/* grab an Internet domain socket */
if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}

/* connect to PORT on HOST */
if (connect(sd,(struct sockaddr *)  &pin, sizeof(pin)) == -1) {
perror("connect");
exit(1);
}

/* send a message to the server PORT on machine HOST */
if (send(sd, gonder, strlen(gonder), 0) == -1) {
perror("send");
exit(1);
}

        /* wait for a message to come back from the server */
        if (recv(sd, dir, DIRSIZE, 0) == -1) {
                perror("recv");
                exit(1);
        }

        /* spew-out the results and bail out of here! */
        printf("%s\n", dir);

close(sd);
}


gcc test.c -o test
./test google.com

HTTP/1.0 302 Found
Location: http://www.google.com/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
X-Content-Type-Options: nosniff
Date: Tue, 02 Apr 2013 12:55:55 GMT
Server: sffe
Content-Length: 219
X-XSS-Protection: 1; mode=block

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

benzeri bir çıktı oluşturur. istersen sunucudan gelen veri boyutunu istersen içerikteki bir kelimeyi sorgularak sitenin varlıgından emin olabilirsin.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: Gökhan BEKEN - 02 Nisan 2013, 16:25:24
Alıntı yapılan: speak48 - 02 Nisan 2013, 14:42:26
aklınıza geleni değilde bildiğinizi hatta yaptığınız şeyi söylerseniz daha yardımcı olursunuz.
Bilmediğim şey aklıma nasıl gelsin? Bastır parasını yapıyım o kadar hazır istiyorsan.
Ayrıca konuyu visual c++ kısmına açmışsın. C ile nasıl yapılır diye soruyosun.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: t2 - 02 Nisan 2013, 18:11:18
Alıntı yapılan: speak48 - 02 Nisan 2013, 13:55:50
gireceğim bir web adresinin var olup olmadığını otamatik kontrol etmek istiyorum.
ama bu kadar basit bir istek bile  nedense bulunmaz oluyor.
c ile bu nasıl yapabilirim.

embedded webbrowser  var onu kullanırsınız. Bu şu demek. internet explorer sizin uygulamanız içinde açılıyor sayfa içeriğini ve diğer birçok özelliğini kullanabiliyorsunuz. düğmeleri tıklayıp javascriptlerini çalıştıraibliyorsunuz.

diyelim sayfayı açtık
http://sfasfasdasd.com (http://sfasfasdasd.com)

3 saniye bekledik tık yok. bir de baktık sayfa içindeki metin
Sunucu bulunamadı       
Alıntı Yapwww.sfasfasdasd.com (http://www.sfasfasdasd.com) konumundaki sunucu bulunamıyor.
haline dönüşmüş. Haaa nedemekmiş sayfa yokmuş.

3 saniye bekledik hala bekliyoruz hiç bir şey gelmemiş. 30 saniye oldu hala içi boş. bu nedemek? sunucuda sitede bir sıkıntı var demek hala cevap veremiyor.

3 saniye bekledik sayfa içinde başka birşey çıktı 404 hatası yada 503 bu ne demek?..
bunun gibi size lazım olan hataları göstertebilir kaydını tutabilirsiniz. lazım olmayanın saklamazsınız.

peki sayfa açıldıysa nasıl anlayacağzı daha önce o  sayfa ziyaret edilmemiş ki?  şuşu içerik veya hatalar yoksa  sayfa açılmış demektir. orda dur. sayfa içinde beğendiğin link veya içerik varsa onun varlığına da bakılabilir.

embedded webbrowser  C de çalışır mı? illa ki çalışır  komponenti yoksa bile activex nesnesini kullanabilirsiniz.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 18:34:30
@everygelem
socket işe yarayabilir gözüküyor ama bu socket kütüphanesi nerdedir onu arıyoruz şimdide.

@meftun
aklınıza gelen şeyde bir bilgi yok.
deniyeceğim sayfalar olmayınca başka bir yere yonlendirmiyo direkt browser notfound mesajı gönderiyor.
yani olay html in içeriğini sorgulama değil bu html erişilebilinirmi odur.
aradığım şeyde zaten nasıl html erişeceğin ve alacağın hata kodları
bu forumda c bölümü yok ayrıca windowsun c++ derleyicisiye c derleyicisi ortak.

@t2
3 saniyemi baya yüksek 120000 adresi kontrol etmem gerkiyor elle yapmaktan uzun sürmesin
ayrıca aradığım mulaka 3 5 tane fonksiyonun birlikte kullanımıdır koskoca browseri kuullanmayalım

Başlık: Ynt: web adresini kontrrol etmek
Gönderen: Gökhan BEKEN - 02 Nisan 2013, 18:50:45
Alıntı yapılan: speak48 - 02 Nisan 2013, 18:34:30
deniyeceğim sayfalar olmayınca başka bir yere yonlendirmiyo direkt browser notfound mesajı gönderiyor.
bunu gönderiyorsa olay basit değil mi?
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 02 Nisan 2013, 18:57:02
o basit şeyi arıyoruz hala.
bir ilginçlik var belki sorun çıkarır.
o adresin ismi yerine ip adresini girersek browser gene not found diyor.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: Gökhan BEKEN - 02 Nisan 2013, 19:01:13
browser'ın verdiği mesajı @t2 nin dediği gibi programınıza browser ekleyerek rahat halledersiniz. Siz sayfa yoksa html kodu yok diye düşünmüşsünüz. Oysa browser kendisi o mesajı html şeklinde verir. Sizde bu mesajı görünce "hımm demekki böyle bir site yoktur" mesajını şak diye yapıştırırsınız.
Ama bunu visual dillerde yaparsınız c dilinde browser ekleyip mesaj alma olayını bilmiyorum.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: peko - 03 Nisan 2013, 01:15:12

Alıntı Yap120000 adresi kontrol etmem gerkiyor

Rakam doğru mu?
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: iyildirim - 03 Nisan 2013, 03:27:35
Webbrowser kontrolleri ile olur tabii ama redirect edileni anlamak kısmı patlar.
En iyi yol  @everygelem in verdiği örnekteki gibi direkt soket kullanmak. Sayfa bulundu, yok yada redirect edildi ana sayfaya yönlendi gibi şeyleri anlayabilirsiniz. Birde webbrowser a göre çok daha hızlı olur.

Sayfanın içeriği ile ilgilenmiyorsanız sadece baştaki 50-100 byte header'ı okumak yeterli. Sonrasını almak bile gerekmez. 
Ha birde sadece http header'ını da request etmek de mümkün.

Socket için kütüphane vs. bulmak zor değil.
Yine de hazır birşey kullanayım derseniz chilkat a bir bakın derim. Çeşitli diller için örnekleri  vs de var. 1 Ay deneme süresinde işinizi bitirmeniz lazım.
http://www.example-code.com/vcpp/http.asp (http://www.example-code.com/vcpp/http.asp)

http header get için direkt örnek kodu da varmış .
http://www.example-code.com/vcpp/http_head.asp (http://www.example-code.com/vcpp/http_head.asp)
Geri kalan dönen header içinde "200 OK" varmı yok kısmı. 
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: speak48 - 04 Nisan 2013, 00:18:38
hocam soketlerle işi çözdüm.
windowsun "winsock2.h" kütüphanesi bsd socket ile aynı işi görüyormuş.
hata kodlarına bakıp client error değilse içeriğine göz atıp
anca bitane doğru adres bulabildim.
ama beklediğimden yavaş çalışmakta.
Başlık: Ynt: web adresini kontrrol etmek
Gönderen: everygelem - 08 Nisan 2013, 11:10:24
Her sunucuya tek tek bağlanmak biraz yavaş olur evet. bunun içinde paralellik (thread) olayına bakın c de.