Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...

Dupa renuntarea la aparat dentar

pelerinaj in Balcik
 

urllib POST {python}

- - - - -
  • Please log in to reply
9 replies to this topic

#1
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
Salutare  tuturor,
Din ciclu sa-mi bag picioru' in restrictii vin cu o problema.
Intr-un topic anterior ma laudam cu un program in python care face aliniare de secvente de proteine (local /global) si predictie a structurilor secundare. Partea local functioneaza bine, dar cum orice proiect nu e gata pana nu ai si un pic de conectivitate la 'net e nashpa.
Pentru a valida rezultatele obtinute de al meu program, trebuie sa compar rezultatele cu cele obtinute de un algoritm profesionist, gratuit, usor folosibil dintr-un browser.
Aici e faimoasa resursa: http://www.ch.embnet...ALIGN_form.html
Cum neam de neamul meu n-a prea vrut sa stea si sa tot faca copy paste mi-am propus sa automatizez procesul de validare.
Asa ca: PROBLEMA
Nu stiu cum sa transmit datele serverului si dupa aceea sa le recuperez, folosind DOAR urllib. Ca descrierea sa fie completa, nu pot folosi librarii externe ( adica orice nu vine in librariile standart python3 e un mare no no ) deci mechanize sau urllib2 sunt excluse.

Analizand siteul si ce date trebuie sa-i furnizez le precizez aici: seq1,seq2,open,no,exten,method si matrix .
import sys, urllib.parse, urllib.request, urllib
from http.client import *
url = "http://www.ch.embnet.org/software/LALIGN_form.html"
# url = "http://www.ch.embnet.org/cgi-bin/LALIGN_form_parser"
data = urllib.parse.urlencode({'action': 'http://www.ch.embnet.org//cgi-bin/LALIGN_form_parser',
							 'method': 'global', 'matrix': 'blosum80',
							 'seq1': 'WYFGKLGRKDAERQLLSFGNPRGTFLIRESETTKGAYSLSIRDWDDMKGDHVKHYKIRKLDNGGYYITTRAQFETLQQLVQHYSERAAGLCCRLVVPC',
							 'seq2': 'WYFGKITRRESERLLLNAENPRGTFLVRESETTKGAYCLSVSDFDNAKGLNVKHYKIRKLDSGGFYITSRTQFNSLQQLVAYYSKHADGLCHRLTTVC',
							 'open': '-14', 'no': 3, 'exten': '-4',
							 'submit': 'Run lalign'})
data = data.encode('utf-8')
request = urllib.request.Request(url, data, {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'})
result = urllib.request.urlopen(request)
finalurl = result.geturl()
print(result.read())
print()
print(urllib.request.urlopen(urllib.request.Request('http://www.ch.embnet.org/cgi-bin/LALIGN_form_parser')).read())
# fullUrl = url + '?' + data
# data=urllib.request.urlopen(fullUrl)
# print(data.read())


Am observat ca siteul face un redirect aici http://www.ch.embnet...IGN_form_parser , dat uitandu-ma la codul sursa al paginii, se vede clar ca seq1 si seq2 nu sunt transmise.

Aveti cumva vreo idee de cum sa recuperez rezultatele? (in termeni de webapp sunt planta..se vede cred din codul sursa al scriptului

Multumesc anticipat

#2
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
Pai in primul rand ai grija sa trimit toate headerele corect ca nu degeaba le trimite browserul. Apoi parametrii. De exemplu unde e parametrul "evalue" trimis in cazul tau? sau "comm1", "comm2"...
Apoi aplicatiile astea online in general nu-s facute de studenti pe o bere si o pizza, vezi ca nu cumva sa te verifice la cookies cand faci requestul de post, si daca da, ai nevoie de un GET request initial sa primesti tot ce trebuie, cookies si vezi daca nu cumva sunt si alte campuri hidden puse pentru anti-CSRF.

Apoi vezi ca primesti un 304 not modified daca pui headerul "If-Modified-Since", "Thu, 05 Mar 2015 09:10:33 GMT" asa cum o face browserul Posted Image
Eu am facut in java ca nu stiu pytong, Insa de mers merge, e usor de 'pacalit'. Ultima chestie ca sa obtii rezultatele e sa parsezi entity-ul primit si sa cauti divu "sib_body" si de acolo iti tu ce te intereseaza.

Attached Files


Edited by potae, 06 March 2015 - 15:01.


#3
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
Sunt sigur ca ai o inima mare, nu shareuiesti si tu  codu sursa java? Sa am o sursa de inspiratie si eu

#4
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
100 lei man iti dau codul sursa plus program .exe (no jvm required™) care ruleaza silent si primeste argumente string-urile alea si salveaza output-ul (formatat, nu aiurea, strict ce te intereseaza si in ce format vrei tu™) intr-un txt/baza de date/excel/pdf/word. Exe-ul ti-l invoci tu din pytong si apoi citesti fisierul sau si mai elegant outputul cu popen™. Sau ma rog faci ce vrei cu el. Sorry dar nu pot da chiar pe gratis ca si eu m-am chinuit sa invat sa dau free ar insemna sa imi iau painea de la gura ca eu din asta traiesc meditatii si cunoscut librarii/framework-uri obscure. Gratis te ajut doar cu indicatii.

Edited by potae, 06 March 2015 - 19:14.


#5
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
Revin cu o ultima intrebare.
POSTul tau arata cam asa?
POST /cgi-bin/LALIGN_form_parser HTTP/1.1\r\nHost: www.ch.embnet.org\r\nAccept-Encoding: identity\r\n
Content-Length: 326\r\n
\r\nmatrix=blosum62&no=3&exten=-4&comm2=unknown&format1=plain_text&open=-14&format2=plain_text&method=global&comm1=unknowm&seq1=WYFGKLGRKDAERQLLSFGNPRGTFLIRESETTKGAYSLSIRDWDDMKGDHVKHYKIRKLDNGGYYITTRAQFETLQQLVQHYSERAAGLCCRLVVPC&seq2=WYFGKITRRESERLLLNAENPRGTFLVRESETTKGAYCLSVSDFDNAKGLNVKHYKIRKLDSGGFYITSRTQFNSLQQLVAYYSKHADGLCHRLTTVC


Pentru ca eu primesc acuma alta eroare. "sequence management internal error: non implemented format name
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
	<link rel="stylesheet" href="/sib_css/sib-20130605.css" type="text/css" media="screen"/>
	<title>LALIGN results</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<meta http-equiv="Content-Style-Type" content="text/css"/>
	<meta http-equiv="Content-Script-Type" content="text/javascript"/>
</head>
<body bgcolor='#ddffdd'>
<div id='sib_top'><a name='TOP'></a></div>
<div id='sib_container'>
	<div id='sib_header_small'>
		<div id='sib_expasy_logo'>
			<a href='http://www.isb-sib.ch' id='sib_link' title='SIB Swiss Institute of Bioinformatics'></a>
			<a href='http://www.expasy.org' id='expasy_link' title='ExPASy - SIB Bioinformatics Resource Portal'></a>
		</div>
		<div class='sib_title_no_logo'>
			<h1>LALIGN</h1>
		</div>
		<div id='sib_header_nav'>
			<a href='/' title='Home page'>Home</a>&nbsp;|&nbsp;<a href='/contact.html' title='Contact'>Contact</a>&nbsp;
		</div>
	</div>
	<!-- END OF HEADER -->
	<div id='sib_body'>Sequence Management internal Error: non-implemented format name


Ma gandesc ca eroarea vine de la parametrii "format1" si "format2" carora le atribui 'plain_text' ( optiunile de altfel valabila)

Edited by dilo00o, 06 March 2015 - 20:53.


#6
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
Asa arata

Quote


Payload-ul:

Quote

method=global&no=3&evalue=10.0&matrix=blosum80&open=-14&exten=-4&comm1=&format1=plain_text&seq1=WYFGKLGRKDAERQLLSFGNPRGTFLIRESETTKGAYSLSIRDWDDMKGDHVKHYKIRKLDNGGYYITTRAQFETLQQLVQHYSERAAGLCCRLVVPC&comm2=&format2=plain_text&seq2=WYFGKITRRESERLLLNAENPRGTFLVRESETTKGAYCLSVSDFDNAKGLNVKHYKIRKLDSGGFYITSRTQFNSLQQLVAYYSKHADGLCHRLTTVC

Headerele de request:

Quote

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, lzma
Accept-Language: en-US,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Host: www.ch.embnet.org
Origin: http://www.ch.embnet.org
Referer: http://www.ch.embnet...ALIGN_form.html


#7
georgica

georgica

    Active Member

  • Grup: Members
  • Posts: 1,484
  • Înscris: 30.01.2003
FML, am pierdut toată seara cu prostia asta.

Quote

Apoi aplicatiile astea online in general nu-s facute de studenti pe o bere si o pizza, vezi ca nu cumva sa te verifice la cookies cand faci requestul de post, si daca da, ai nevoie de un GET request initial sa primesti tot ce trebuie, cookies si vezi daca nu cumva sunt si alte campuri hidden puse pentru anti-CSRF.

Ăla care a făcut aplicația nu are habar că un dict (mapping) nu este niciodată ordonat. El în loc să acceseze datele din POST după cheie le accesează după index. Asta e eroare de programator începător.
Rezolvarea pentru Python - OrderedDict cu ordinea exactă din form.

from urllib import parse
from urllib import request
from collections import OrderedDict

url = "http://www.ch.embnet.org/cgi-bin/LALIGN_form_parser"

# ordinea introducerii este importanta
data = OrderedDict()
data['method'] = 'global'
data['no'] = '3'
data['evalue'] = '10.0'
data['matrix'] = 'blosum80'
data['open'] = '-14'
data['exten'] = '-4'
data['comm1'] = ''
data['format1'] = 'plain_text'
data['seq1'] = 'WYFGKLGRKDAERQLLSFGNPRGTFLIRESETTKGAYSLSIRDWDDMKGDHVKHYKIRKLDNGGYYITTRAQFETLQQLVQHYSERAAGLCCRLVVPC'
data['comm2'] = ''
data['format2'] = 'plain_text'
data['seq2'] = 'WYFGKITRRESERLLLNAENPRGTFLVRESETTKGAYCLSVSDFDNAKGLNVKHYKIRKLDSGGFYITSRTQFNSLQQLVAYYSKHADGLCHRLTTVC'

req = request.Request(url)
req.data = parse.urlencode(data).encode('utf-8')
ret = request.urlopen(req)
res = ret.read().decode('utf-8')
print(res)


Eu nu vreau 100 de lei, îmi place câte o provocare de genul ăsta.

Acu să ne zică @potae câte sute de linii are codul lui Posted Image

Edited by georgica, 07 March 2015 - 00:36.


#8
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
74, de parca e relevant numarul de linii... Conteaza daca si castigi ceva. Iar in cazul asta nu am castigat nici tu nici eu.
La mine ca n-a fost sa fie la tine de fraier dornic sa arati la altii ce priceput esti :)).

Cred ca programarea e meseria cu cei mai multi suckeri. N-am vazut in contabilitate sau avocatura oameni sa piarda timpu' muncind benevol sa rezolve problemele altora...

#9
georgica

georgica

    Active Member

  • Grup: Members
  • Posts: 1,484
  • Înscris: 30.01.2003
Mersi că m-ai jignit de două ori într-un singur post. Poate te ajută să dormi mai bine după ce ți-am stricat planurile de îmbogățire.
În caz că nu știai, lumea mai face și acte caritabile, nu sînt toți puși pe căpătuială.
Dacă gândești așa, nu știu ce cauți pe un forum unde lumea vine să fie ajutată. Sau te învârți pe aici la mica ciupeală, poate mai pică un biștar acolo?

#10
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
@georgica,
Multumesc pentru idee, am schimbat in codul meu dictionarul cu OrderedDict si merge si la mine, ce-i drept e putin mai lung (47 de linii). Aia a fost buba.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate