Zapytanie do WWW o dane

0

Doszedłem do tego w programie, że chciałbym odczytać dane, które są zapisane na stronie (www.saoksd.pl/**123.php**). Da się jakoś odczytać dane z tego pliku php, które są zapisane jako zmienne?

$ania = 'tak'; $tomek = 'nie';

. Chciałbym jakoś odczytać te dwie zmienne przy pomocy c#, lecz nie wiem jak się do tego zabrać, da się wysłać jakieś żądanie, które poprosi konkretnie o takie informacje, nie o inne? jeśli tak to mógłby ktoś mi powiedzieć jak, jakiej funkcji do tego użyć

0

Czyli chcesz, żeby żądanie WWW zwróciło Ci plik źródłowy php? To se ne da. FTP jedynie, no chyba, że na serwerze nie ma zainstalowanego php.

0

Możesz wysłać do skryptu PHP zapytanie o te dwie zmienne, a skrypt je wyśle jako output:

if (isset($_GET['zmienna1'])) echo $zmienna1;

Innego sposobu nie ma.

0

Bardziej chodzi mi o funkcje jaką mam użyć w c# do zapytania o te zmienne, macie jakieś pomysły?

0

WebClient.Download string jest najprostszą metodą
http://msdn.microsoft.com/en-us/library/fhd1f0sw.aspx

        WebClient client = new WebClient ();
        string ania = client.DownloadString ("mojadres.pl/mojskryptw.php?zmienna=ania");
        string tomek = client.DownloadString("mojadres.pl/mojskryptw.php?zmienna=tomek");

DownloadString zwróci Ci wszystko co wypluje php. Jeżeli pod adresem będzie strona w html to będziesz mieć tam całą stronę. Jeżeli skrypt wypisze tylko wartość zmiennej to nie trzeba będzie nic parsować.

Zastanawia mnie tylko do czego Tobie takie cuda?

0

Takie rzeczy potrzebne mi są do mego programu, w którym można się zarejstrować, program wysyła żądanie do WWW, natomiast WWW wysyła żądanie do bazy danych, po czym zapytanie wraca znów do programu, WWW jest tak jakby pośrednikiem. Ten sposób, który tutaj podałeś będzie dobry na tego typu rzecz?

0

Wystarczy w PHP mieć taki kod aby odczytać zawartość zmiennej, czy trzeba coś jeszcze dodać?

<?php

$zmienna = 'ania';

?>
0

Jeżeli chcesz spoza skryptu tę zmienną odczytać, to musiałbyś tak zmodyfikować kod:

<?php
 
$zmienna = 'ania';
 
if (isset($_GET['zmiena']))
 echo $zmienna;

?>

Wywołując wtedy:
plik.php?zmienna
Otrzymałbyś wartość tej zmiennej (po cokolwiek chcesz ją odczytywać poza skryptem...).

0

Pogram napisany w c# ma wysłać dwie zmienne, które przyjmie WWW, następnie WWW wyśle te zmienne do SQL, zapisze je. A da się jakoś wysłać zapytanie/żądanie do programu napisanego w c# przez WWW? Gdy w mysql pomyślnie się zapisze dane, chciałbym aby WWW wysłało tekst do programu, że zapis zakończył się pomyślnie. Idę dobrą drogą czy piszę bzdury? Co do wczytywania zmiennych do zrobiłem tak + łączenie się z bazą i dodawanie rekordów z tych zmiennych

<?php include("baza.php");

$l = $_GET['login'];
$h = $_GET['haslo'];

echo $l;
echo $h;

mysql_query("INSERT INTO `uzytkownicy` (nick,haslo) VALUES ('$l','$h');");

?>
0

ale napisz na po co to wszystko?

0

Domyślam się, że to co zrobiłem nie jest bezpieczne, lecz nie znam innego sposobu na żądanie dokładnych zmiennych z WWW, bez używania linku, tak jak ja zrobiłem. Jeśli znacie bezpieczniejszy spobób to prosiłbym o pomoc. To wszystko jest do tego, że chce się nauczyć bezpiecznie korzystać z bazy przez aplikacje napisaną w C#. Jeżeli tą aplikacje wysłałbym do innych użytkowników mogliby zdekompilować ją i mieliby dane do mojej bazy, a tak mogą tylko zobaczyć zapytania wysyłane do WWW, natomiast do danych bazy się nie dostaną, gdyż dane są na WWW. A tak chcę zrobić łączenie się programu ze stroną WWW, a strona WWW ma łączyć się z bazą, ma być takim pośrednikiem

0

Niedawno była już o tym dyskusja, i w tym wątku: Serwer MySQL z połączeniami zewnętrznymi podałem takie rozwiązanie: http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html

0

Ja nie rozumiem co tam ma się wydarzyć, dlatego szukam łatwiejszego sposobu. C# wysyła żądanie do WWW o odczytanie zmiennej, czy na odwrót?

0

Nie ma czegoś takiego jak zmienna w tym kontekście.
W PHP piszesz funkcję, która przyjmuje jakieś argumenty, robi coś w bazie i zwraca wynik.
C# potrafi wysłać argumenty do tej funkcji i odebrać wynik.

0

Zrobiłem to co w tym poradniku jest, lecz kompletnie tego nie rozumiem, do czego mi się to przyda. Ten skrypt ma za zadanie wysłać do WWW jakieś dane, WWW ma je odczytać, tak? A jak WWW może coś odczytać z C#? No pewnie jakąś bzdurę napisałem ale kompletnie nie wiem co to ma robić, jakbym zgłupiał. Prosiłbym o wytłumaczenie mi tego :/

1

ale po co? Jak podejrzą dane do połączenia z bazą to równie dobrze zobaczą co się wysyła do WWW i też narobią bajzlu. To samo ale dużo prościej możesz osiągnąć odpowiednio projektując bazę - wszelkie dodawanie/zmienianie/usuwanie danych tylko przez stored procedure a pobieranie danych tylko z widoków i user, którym się łączysz do bazy ma uprawnienia tylko do widoków procedur. Osiągasz dokładnie taki sam poziom bezpieczeństwa bez pośrednika w postaci www/php

0
Fakoskis napisał(a):

Ten skrypt ma za zadanie wysłać do WWW jakieś dane, WWW ma je odczytać, tak?

My się chyba nie rozumiemy, co nazywasz skryptem, a co nazywasz WWW?

A jak WWW może coś odczytać z C#?

Nie może i nie musi. Ty z programu C# wysyłasz żądanie pod dany URL, a w odpowiedzi dostajesz wynik.
Poczytaj o tym, jak działa HTTP: http://pl.wikipedia.org/wiki/HTTP

0

http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html . Wysłałeś mi taki tutorial, zrobiłem tak jak on, lecz nie wiem wgl do czego ma mi się to przydać, mam wpisać w programie jakiś tekst, który zostanie wysłany do WWW a z WWW z powrotem do programu i wyświetlić ten tekst? Jakiś łatwiejszy sposób pobierania danych z WWW przez C#, także bezpieczny moglibyście mi zapodać, przestawić?

Abrada... my się chyba nie rozumiemy. W moim wypadku pośrednik (WWW) musi być. Bardziej mi zależy na C# i SQL niż WWW i SQL, lecz bez WWW w przypadku C# -SQL nie da się tego zrobić, ponieważ jak zapiszę dane do bazy w programie c#, to ludzie znajdą te dane w 1min, jeżeli dane do SQL będą schowane na WWW, to tych danych tak łatwo nie zdobędą. WWW jest potrzebne tylko do łączenia się z bazą i zwracania wyników bazy, głównym projektem ma być program c#, WWW ma być tylko pomocą do SQL, nic więcej

0
abrakadaber napisał(a):

ale po co? Jak podejrzą dane do połączenia z bazą to równie dobrze zobaczą co się wysyła do WWW i też narobią bajzlu. To samo ale dużo prościej możesz osiągnąć odpowiednio projektując bazę - wszelkie dodawanie/zmienianie/usuwanie danych tylko przez stored procedure a pobieranie danych tylko z widoków i user, którym się łączysz do bazy ma uprawnienia tylko do widoków procedur. Osiągasz dokładnie taki sam poziom bezpieczeństwa bez pośrednika w postaci www/php

Po co udostępniać wszystkim użytkownikom schemat bazy? Chyba tylko po to, żeby łatwiej mogli narobić szkód.

Fakoskis napisał(a):

http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html . Wysłałeś mi taki tutorial, zrobiłem tak jak on, lecz nie wiem wgl do czego ma mi się to przydać, mam wpisać w programie jakiś tekst, który zostanie wysłany do WWW a z WWW z powrotem do programu i wyświetlić ten tekst? Jakiś łatwiejszy sposób pobierania danych z WWW przez C#, także bezpieczny moglibyście mi zapodać, przestawić?

Funkcję ProcessSimpleType z tego przykładu masz podmienić na taką, która robi to, co Ty potrzebujesz. Sorry, ale jeśli tego nie rozumiesz, to Ci się to nigdy nie uda. W tym linku masz pełen opis tego, jak skomunikować C# z PHP, prościej się nie da.

1
Fakoskis napisał(a):

jak zapiszę dane do bazy w programie c#, to ludzie znajdą te dane w 1min, jeżeli dane do SQL będą schowane na WWW, to tych danych tak łatwo nie zdobędą.
Masz błędne pojęcie o tym co robisz - czy to będzie SQL czy WWW to dostęp do tych danych będzie tak samo prosty. Jeśli program będzie musiał te dane odczytać to choćbyś stanął na rzęsach to te dane będzie można wyciągnąć i sposób w jaki Ty sobie utrudnisz życie nie ma tu nic do poziomu trudności wyciągnięcia tych danych. Bo jeśli ktoś prosto wyciągnie z programu user i pass do bazy to tak samo prosto wyciągnie zapytanie GET/POST do WWW i cały Twój misterny plan w pizdu. Zrozum to. A to co robisz to tylko dodatkowy pośrednik, który może się spieprzyć (padnie serwer, będziesz miał błąd w skrypcie, itp)

somekind napisał(a):

Po co udostępniać wszystkim użytkownikom schemat bazy? Chyba tylko po to, żeby łatwiej mogli narobić szkód.

ale o czym ty do mnie rozmawiasz? Jeśli dasz dostęp tylko do stored proc to ktokolwiek narobi tylko tyle szkód na ile mu te stored proc pozwolą. Nie wiem jak z mysqlem ale przy odpowiednio nadanych uprawnieniach (w oracle np.) nawet nie można zobaczyć jakie są tabele/indexy/inne. Co mi zabroni wiedząc jak przez te "cudowne" zapytania do WWW usunąć np. wszystkie rekordy samemu preparując żądania do WWW?

Wytłumaczcie mi to oboje albo chociaż jeden z Was bo chyba macie trochę błędne pojęcie o tym co próbujecie zrobić.
BTW zamiast się pieprzyć z PHP nie prościej zrobić to w WCF?

0
abrakadaber napisał(a):

Masz błędne pojęcie o tym co robisz - czy to będzie SQL czy WWW to dostęp do tych danych będzie tak samo prosty. Jeśli program będzie musiał te dane odczytać to choćbyś stanął na rzęsach to te dane będzie można wyciągnąć i sposób w jaki Ty sobie utrudnisz życie nie ma tu nic do poziomu trudności wyciągnięcia tych danych. Bo jeśli ktoś prosto wyciągnie z programu user i pass do bazy to tak samo prosto wyciągnie zapytanie GET/POST do WWW i cały Twój misterny plan w pizdu. Zrozum to. A to co robisz to tylko dodatkowy pośrednik, który może się spieprzyć (padnie serwer, będziesz miał błąd w skrypcie, itp)

Korzystając z warstwy pośredniej nie trzeba w programie zaszywać connection stringa ani żadnych nazw związanych ze strukturą bazy, jedynie url do webserwisu. Serio uważasz, że to żadna różnica?
Bo tak jakby próbujesz obalić powszechnie stosowane od wielu lat rozwiązania. Cała branża IT się myli?

Co mi zabroni wiedząc jak przez te "cudowne" zapytania do WWW usunąć np. wszystkie rekordy samemu preparując żądania do WWW?

Niby jak? Przecież webserwisy udostępniają tylko swoją funkcjonalność, nie dają możliwości wykonania każdego dowolnego SQLa.

BTW zamiast się pieprzyć z PHP nie prościej zrobić to w WCF?

Pewno prościej, tylko nie wszystkie hostingi PHP obsługują WCF.

0

webserwis to jest webserwis - jego sens istnienia to właśnie jako warstwa pośrednicząca. Serwer www z php się do tego średnio nadaje. Tłumaczę jeszcze raz - jak zabronisz wykonywania insert/update/delete/select na TABELACH, dasz select TYLKO do widoków i wszelką zmianę/dodanie/usunięcie przez stored proc to masz to samo co przez WS, nawet nie musisz (ba, wcale nie trzeba) udostępniać struktury bazy, a jak dodatkowo używasz bazy, która umożliwia skompilowanie stored proc (np. oracle) to nawet Ci nikt nie podejrzy co się w procedurze dzieje. Napiszę to jeszcze raz i wyraźnie - uważam, że robienie z PHP warstwy POŚREDNIEJ pomiędzy bazą a aplikacją desktopową to nie jest dobry pomysł, szczególnie że ta app jest w c# i aż się prosi aby skorzystać właśnie z MSowego rozwiązania czyli WCF.

BTW tak samo jak mogę wywołać 1000 razy stored proc do usunięcia rekordu z kolejnymi ID, tak samo mogę wywołać 1000 razy GET do strony WWW z kolejnymi ID czy wywołać 1000 razy metodę WCFa. Nie bez powodu widoki i stored proc w bazie są uznawane za 3 warstwę, pośrednią. I uprzedzając następne stwierdzenie - zarówno w stored proc, PHP czy WCF mogę sprawdzać, czy np. nie jest to 10 żądanie usunięcia rekordu i blokować każde kolejne od tego klienta.
Dla jednych będzie to prościej zrobić w bazie, dla innych w WCF, dla jeszcze innych w PHP. Cały problem w tym, że dla pytacza wszędzie będzie tak samo ciężko...

0

Co do tego SQL'a z prawami usera do stored proc. jestem ciekaw jak będzie wyglądała siatka użytkowników.
Każdy użytkownik programu będzie miał prawo do utworzenia swojego konta przy pomocy procedury składowanej np. rejestruj(login,haslo) po czym musiał by używać procedury odczytaj_historie_konta(login, haslo, data).
Za każdym razem musiałbyś podawać login i hasło przy każdej procedurze składowanej tyczącej się prywatnego użytkownika. Nie mówię, że jest to niemożliwe, ale osobiście z takim podejściem nigdzie się nie spotkałem.
Poza tym weryfikację poprawności podawanych pól musisz i tak kiedyś zrealizować nieważne czy jest to SQL czy warstwa pośrednicząca.

0

@szopenfx: Zarejestrować sesję i gadać tokenem. Token trzymać w tabeli z silnikiem MEMORY.

0
abrakadaber napisał(a):

webserwis to jest webserwis - jego sens istnienia to właśnie jako warstwa pośrednicząca. Serwer www z php się do tego średnio nadaje. Tłumaczę jeszcze raz - jak zabronisz wykonywania insert/update/delete/select na TABELACH, dasz select TYLKO do widoków i wszelką zmianę/dodanie/usunięcie przez stored proc to masz to samo co przez WS

To samo, z wyjątkiem tego, że upubliczniasz connection string do bazy. Moim zdaniem nie jest to bezpieczne.

uważam, że robienie z PHP warstwy POŚREDNIEJ pomiędzy bazą a aplikacją desktopową to nie jest dobry pomysł, szczególnie że ta app jest w c# i aż się prosi aby skorzystać właśnie z MSowego rozwiązania czyli WCF.

Oczywiście tu masz rację, pod warunkiem, że można użyć WCF, i jest możliwy dostęp do bazy z zewnętrznej aplikacji. W tym wypadku to co proponujesz jest niemożliwe, więc nie ma sensu gdybanie, trzeba się skupić na rozwiązaniu w tym okropnym PHP.

1

W PHP również oczywiście można tworzyć web serwisy. Wpisz w google PHP+SOAP, poświęć parę dni na naukę i zrób to czego potrzebujesz.

Jeżeli nie spodoba Ci się ten sposób to możesz robić to na około czyli tak jak zacząłeś, ale nie robiłbym tego tak, że funkcją echo wypisujesz tekst jaki pojawi się w aplikacji. Zbuduj w wyniku (może być funkcją echo) dokument XML o odpowiedniej strukturze, który będzie zawierał dane. Później a aplikacji .NET użyjesz bibliotek do odczytania XML'a.

Również opowiadam się za tym aby taka aplikacja nie komunikowała się bezpośrednio z bazą i nie trzymała connection stringa. Pytanie jeszcze co to za serwer MySQL. Postawiony lokalnie w firmie czy jakiś wykupiony np. z home.pl? Większość serwerów MySQL ma zamknięte "wyjście ((albo wejście)" - nie wiem jak to nazwać, ale jakaś nazwa istnieje) - w takiej sytuacji swoją aplikacją nie połączysz się z bazą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1